win7中Windows.Forms.VisualStyles.VisualStyleRenderer.GetPartSize()中的可疑错误

时间:2011-08-19 14:45:33

标签: .net winforms

我认为System.Windows.Forms.VisualStyles.VisualStyleRenderer.GetPartSize()中存在错误。

通过此link找到。我创建了一个示例控制台应用程序,它调用此方法并将返回的Size对象的宽度和高度打印到控制台。以下是我们办公室的一些结果:

  • Vista:宽度= 20,高度= 21
  • XP:宽度= 15,高度= 20
  • Win7:Width = 7,Height = 21< ---返回的宽度错误

代码如下所示:

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并返回正确的大小是否安全?

3 个答案:

答案 0 :(得分:2)

与Microsoft Connect上此bug report中的问题类似。

答案 1 :(得分:2)

这也是我得到的,7 x 21:

enter image description here

是的,那个箭头正好是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上看起来正确,所以必须有一个解决方法或者你正在做某事。不同。