WPF с высоким разрешением

Я создал простое тестовое приложение WPF для веб-браузера с изображениями и текстом на холсте с окнами с разрешением 96 точек на дюйм.

Затем я переключился на 120 dpi и:-(((Дисплей грязный, размер изображения изменился, а часть холста не видна...

Когда я использовал Winforms, я установил для свойства AutoScaleMode значение None, и окна сохранили свой размер, а также элементы управления, элементы управления, унаследовавшие шрифт, отображаются правильно, не размыто и не слишком велико...

Что я могу сделать, чтобы имитировать это (хорошее) поведение в W inF?

3 ответа

Я только что нашел ошибку, используя MaxHeight в WPF в.NET 4, установите в стиле, который наследуется другим стилем и который используется в качестве StaticResource, на который не влияет DPI, установленный пользователем. Я установил это из MaxHeight в HeightЗатем на него повлияло DPI. Я подозреваю, что ошибка в.NET 4 (и, возможно, другие структуры) здесь.

Предположительно вы используете фиксированные единицы длины (px). Попробуйте изменить макет вашего проекта, помня правила макета WPF. На этой странице есть несколько рекомендаций для этого.

Я не понимаю, что вы подразумеваете под "веб-браузер WPF ... приложение". WPF не запускается в веб-браузере, если вы не говорите о XBAP. Или ты делаешь Silverlight? Или это просто навигационное приложение WPF, а не браузер? Вам нужно будет уточнить.

WPF автоматически масштабирует ваш контент при работе в режимах с высоким разрешением. Это предполагаемое поведение: если пользователь явно говорит, что хочет, чтобы на экране все было больше, то WPF будет уважать желания пользователя. Старые хаки WinForms "притворяться, что высокого разрешения не существует, просто показать все в нормальном маленьком размере и надеяться, что это не слишком злит пользователя" не доступны в WPF; вы могли бы подражать им, если бы работали над этим, но вы очень сильно настроены на то, чтобы делать правильные вещи.

WPF масштабирует все, поэтому ваше утверждение о том, что "часть холста не видна" не имеет смысла. Он должен масштабировать холст, его родительское окно и дочерние элементы на одну и ту же величину, поэтому, если все соответствует 96dpi, он также должен соответствовать 120dpi и 144dpi. Если нет, то вы делаете что-то странное, и вам придется предоставить пример кода, который воспроизводит проблему.

Вы, кажется, утверждаете, что шрифты размыты, когда вы работаете в режиме высокого разрешения, что звучит очень странно. Шрифты отображаются в виде векторов, поэтому они должны четко масштабироваться и четко отображаться даже в режимах с высоким разрешением. Я никогда не видел расплывчатых шрифтов, которые вы описываете, так что, опять же, вам придется предоставить случай перепечатки.

Единственное, что я мог бы ожидать, это размытые изображения. Если вы используете растровые (растровые) изображения (BMP / GIF / JPG / PNG) в своем пользовательском интерфейсе - например, для значков на панели инструментов - тогда да, они будут выглядеть довольно плохо, когда они масштабируются. Это почти всегда выглядит плохо, когда вы берете маленькое растровое изображение и увеличиваете его. Вы можете попытаться обойти это, используя большие изображения и изменяя их размеры для отображения - например, если вы хотите, чтобы изображения на панели инструментов были 16x16 (в стандартном режиме 96 точек на дюйм), тогда вы можете попробовать поместить растровое изображение 32x32 в свой файл. проект, установив в вашем XAML ширину элемента Image ="16" и высоту ="16", и посмотрим, будет ли это выглядеть лучше. Фактически, это будет 20х20 физических пикселей в режиме 120 точек на дюйм и 24х24 в режиме 144 точек на дюйм, которые все равно будут уменьшены по сравнению с ресурсом 32х32 и, следовательно, будут иметь более качественный снимок, чем исходное изображение 16х16, которое должно быть увеличено, (Однако я не пробовал эту технику на панели инструментов WPF, поэтому не знаю, насколько хорошо она будет работать на практике с типичными изображениями панели инструментов.)

Самый лучший способ обойти проблемы с масштабированием изображений - использовать векторные изображения вместо растровых. К сожалению, сложно найти библиотеки векторных изображений. Они немногочисленны, обычно менее полны, чем то, что вы можете найти для растровых изображений, и часто дороги.

Другие вопросы по тегам