30 декабря 2012 г.

WPF кнопки в Windows 8

Стандартный WPF контрол Button на Windows 8 выглядит ужасно. Куда смотрели дизайнеры и тестировщики? О чем это я... Думаю всем известно, что в Windows Presentation Foundation, в простонародье «Дабью-Пи-Эф», изучением которого я занимаюсь в последнее время с помощью замечательной книги Адама Натана (да уж, немного опоздал), старый ламповый GDI, за некоторыми редкими исключениями, не используется вообще. Стало быть, внешний вид (по умолчанию) всех стандартных элементов управления — это «пародия» на родные для системы кнопки, флажки, списки и меню. По характерным внешним признакам любой .NET программист невооруженным глазом отличит родное для системы приложение от WPF. Для примера, я набросал стандартных элементов на формочки в WinForms (GDI) и WPF, и заскриншотил:

WinForms WPF

Так (справа) выглядит стандартная тема WPF на Windows 7. Неплохо, но могло быть лучше. Что здесь не так? Если вы ср**ый эстет как и я, то заметите неуместный градиент в системном меню, размытые полоски на скролл-баре, намного более светлый цвет прогресс-бара, неправильные тени при нажатии на кнопки и выпадающие списки, нестандартный цвет выделения текста. Но это, в принципе, мелочи. Пережить можно. У WinForms (слева) тоже не все так гладко как хотелось бы, отчасти из-за жуткого шрифта Microsoft Sans Serif, который достался в наследие системе чуть ли не от Windows 3.x. Согласно гайдлайнам Microsoft, в Windows 7 шрифт по-умолчанию должен быть Segoe UI, но в WinForms жуткий MS Sans Serif захардкоджен (эта проблема и пути ее решения подробно расписаны здесь и здесь).
Справедливости ради, у JavaFX, Swing и FireMonkey (клон WPF от разработчиков Delphi) дела с имитацией родных тем Windows обстоят еще хуже, чем у WPF. Но WPF делает сама Microsoft, так что с нее спрос будет повыше.

Чуть выше я упомянул про неправильные тени на кнопках в WPF. Давайте сравним кнопки WinForms и WPF на Windows 7 чуть поближе: