我认为System.Windows.Forms.VisualStyles.VisualStyleRenderer.GetPartSize()
中存在错误。
通过此link找到。我创建了一个示例控制台应用程序,它调用此方法并将返回的Size对象的宽度和高度打印到控制台。以下是我们办公室的一些结果:
代码如下所示:
var element = VisualStyleElement.ComboBox.DropDownButton.Normal;
var renderer = new System.Windows.Forms.VisualStyles.VisualStyleRenderer(element);
var control = new Control();
using (var gr = control.CreateGraphics())
{
var size = renderer.GetPartSize(gr, ThemeSizeType.True);
Console.WriteLine(String.Format("Width={0},Height={1}", size.Width, size.Height));
}
我无法在网络上找到任何表明这是已知问题的内容。有理由怀疑它不是吗?!
更重要的是,您认为检查操作系统是否为Win7并返回正确的大小是否安全?
答案 0 :(得分:2)
与Microsoft Connect上此bug report中的问题类似。
答案 1 :(得分:2)
这也是我得到的,7 x 21:
是的,那个箭头正好是7像素宽。如果要测量箭头左侧和右侧的大小,则可以使用以下元素:
var left = VisualStyleElement.CreateElement("COMBOBOX", 7, 1);
var right = VisualStyleElement.CreateElement("COMBOBOX", 6, 1);
出现在.NET 4中但由于它们在操作系统之间不兼容而隐藏。我的机器上的值分别是(6,21)和(5,21)。
答案 2 :(得分:1)
至少有一个人the same problem。
有足够的耐心,你可以看看一些着名的开源渲染引擎(如WebKit,Gecko,Chrome),看看它们如何呈现下拉按钮(例如作为组合框的一部分)。因为它们在Windows 7上看起来正确,所以必须有一个解决方法或者你正在做某事。不同。