Подозреваемая ошибка в Windows.Forms.VisualStyles.VisualStyleRenderer.GetPartSize () в win7 - PullRequest
0 голосов
/ 19 августа 2011

Я думаю, что есть ошибка в System.Windows.Forms.VisualStyles.VisualStyleRenderer.GetPartSize().

Найдена по этой ссылке .Я создал образец консольного приложения, которое вызывает этот метод и выводит ширину и высоту возвращаемого объекта Size на консоль.Ниже приведены некоторые результаты нашего офиса:

  • Vista: ширина = 20, высота = 21
  • XP: ширина = 15, высота = 20
  • Win7: ширина= 7, высота = 21 <--- указана неправильная ширина </li>

Код показан ниже:

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 ]

2 голосов
/ 19 августа 2011

Похоже на проблему в этом отчете об ошибке в Microsoft Connect.

2 голосов
/ 19 августа 2011

Вот и я тоже, 7 х 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) на моей машине.

1 голос
/ 19 августа 2011

Есть по крайней мере еще один человек, у которого такая же проблема .

При достаточном терпении вы можете взглянуть на некоторые известные движки рендеринга с открытым исходным кодом (такие как WebKit, Gecko, Chrome) наузнайте, как они отображают выпадающие кнопки (например, как часть поля со списком).Так как они выглядят корректно в Windows 7, должен быть обходной путь, или вы делаете что-то еще.отличается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...