WPF с высоким разрешением - PullRequest
3 голосов
/ 08 мая 2011

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

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

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

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

Ответы [ 3 ]

1 голос
/ 08 мая 2011

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

1 голос
/ 21 августа 2014

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

1 голос
/ 08 мая 2011

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

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

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

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

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

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

...