Когда следует использовать SnapsToDevicePixels в WPF 4.0?

Может ли кто-нибудь предложить руководство по использованию SnapsToDevicePixels в WPF 4.0?

Должен ли он использоваться только иногда, если есть проблема, либерально в приложении, только на определенных элементах управления или что?

Хорошие ответы Спенсера и Мартина о том, когда выровнять пиксели.

Что касается того, как : я бы также UseLayoutRounding , что в WPF 4.0 попробуйте использовать свойство UseLayoutRounding вместо SnapsToDevicePixels .

UseLayoutRounding делает то, что вы делаете совместимым с Silverlight ( SnapsToDevicePixels недоступно в Silverlight) … и Microsoft также поощряет использование UseLayoutRounding над SnapsToDevicePixels в своей документации .

Какая разница между двумя? Ну, одна большая разница заключается в том, что UseLayoutRounding происходит во время фазы компоновки, в то время как SnapsToDevicePixels происходит во время фазы визуализации. Это заставляет меня предположить, что UseLayoutRounding – это, вероятно, более эффективный способ (я этого еще не подтвердил).

Все, что сказано, все равно будут причины использовать SnapsToDevicePixels . Фактически, документация MSDN указывает на один. Я добавлю другое: только с SnapsToDevicePixels вы можете использовать рекомендации для точного управления.

Вот некоторые ресурсы по этому вопросу (например, щелчок пикселя и четкость с изображениями, текстом и визуальными эффектами):

  • Документация MSDN для свойства UIElement.SnapsToDevicePixels.
  • Документация MSDN для свойства FrameworkElement.UseLayoutRounding.
  • Вот старая classическая статья Dwayne Need на размытых изображениях.
  • Иногда BitmapScalingMode помогает с ясностью изображения.
  • Отличное сообщение в блоге, в котором показано, как на самом деле использовать SnapsToDevicePixels. Это может быть сложно.
  • Сообщение в блоге текстовой команды WPF обо всех различных улучшениях, которые они добавили в WPF 4.0, чтобы помочь в ясности текста.
  • Еще одно сообщение в блоге WPF Text команды по округлению макета.

Хех. Я знаю, что мой ответ был немного больше, чем то, о чем вы просили … но эта концепция (то есть независимость от резолюции и возникающие в результате проблемы, которые она приносит и как преодолевать их) часто может быть разочарованием при работе с WPF. По крайней мере, я хотел указать вам на новое свойство WPF 4.0, UseLayoutRounding .

ОБНОВИТЬ

Мне просто нужно добавить, так как я видел это снова и снова … иногда SnapsToDevicePixels работает, когда UseLayoutRounding этого не делает. Мне жаль, что я не могу сказать, почему это так, но сначала попробуйте UseLayoutRounding, и если это не сработает, не стесняйтесь попробовать SnapsToDevicePixels .

Эта линия настолько резкая, что может вас порезать!

Он должен использоваться для элементов управления или областей, где имеет место размещение пикселей. Одним из примеров может служить управление, связанное с canvasом приложения рисования. Вы когда-нибудь видели карту fragmentированного диска? Это может быть еще один пример.

Единственное исключение, о котором я могу думать, это когда вы используете какие-то разделительные линии. В то время как большинство людей ожидают, что линии границы будут твердыми, если эта настройка выключена, они могут выглядеть размытыми и отвлекающими.

В основном, если размытые края = плохие, тогда выключите его.

Один случай – если вы показываете изображение или видео. Если вы не привязаны к пикселям устройства (то есть к пикселям видеоэкрана), тогда некоторый алгоритм (интерполяция, сглаживание) используется для позиционирования пикселей вашего изображения «между» пикселями вашего экрана, а отображаемое не будет выглядеть так же, как и исходное изображение. Изображение потеряло бы некоторую остроту.

Просто заметил, что это очень полезно для Границ. Дополнительная информация здесь .

  
  • Изменяет ли атрибут привязки WPF маркер к streamу пользовательского интерфейса?
  • Установите позицию курсора / курсора в конец текстового поля WPF с строковым значением
  • Как определить номер недели определенной даты?
  • Как остановить Wpf Tabcontrol, чтобы выгрузить визуальное дерево при изменении табуляции
  • Почему MVVM и каковы основные преимущества?
  • Что такое WPF Preview Events?
  • Как создать вкладки трапеции в элементе управления вкладками WPF
  • Как я могу получить WPF EventTrigger в триггере View, если он требует диктует базовую модель Viewmodel?
  • Как заставить приложение WPF работать в режиме администратора
  • Добавить параметр в событие Click Button
  • Как отключить элемент списка ListBox на основе значения свойства?
  • Давайте будем гением компьютера.