Может ли кто-нибудь предложить руководство по использованию SnapsToDevicePixels
в WPF 4.0?
Должен ли он использоваться только иногда, если есть проблема, либерально в приложении, только на определенных элементах управления или что?
Может ли кто-нибудь предложить руководство по использованию SnapsToDevicePixels
в WPF 4.0?
Должен ли он использоваться только иногда, если есть проблема, либерально в приложении, только на определенных элементах управления или что?
Хорошие ответы Спенсера и Мартина на при, чтобы выровнять ваши пиксели.
Что касается как: я также хотел бы указать, что в WPF 4.0 попробуйте использовать свойство UseLayoutRounding
вместо SnapsToDevicePixels
.
UseLayoutRounding
делает то, что вы делаете совместимым с Silverlight (SnapsToDevicePixels
недоступно в Silverlight)... и Microsoft также поощряет использование UseLayoutRounding
over SnapsToDevicePixels
в своем .
В чем разница между этими двумя? Что ж, большое различие заключается в том, что UseLayoutRounding
происходит во время фазы компоновки, а SnapsToDevicePixels
происходит во время фазы визуализации. Это заставляет меня предположить, что UseLayoutRounding
, вероятно, более эффективный способ пойти (я еще не подтвердил это).
Все, что сказано, все равно будут причины использовать SnapsToDevicePixels
. Фактически, документация MSDN указывает на один. Я добавлю другое: только с SnapsToDevicePixels
вы можете использовать рекомендации для точного управления.
Вот некоторые ресурсы по этому вопросу (например, пиксельная привязка и четкость с изображениями, текстом и визуальными эффектами):
Хех. Я знаю, что мой ответ был немного больше, чем то, о чем вы просили... но эта концепция (то есть независимость от резолюции и возникающие в результате проблемы, которые она вызывает и как их преодолеть) часто может быть точкой разочарование при работе с WPF. По крайней мере, я хотел указать вам на новое свойство WPF 4.0, UseLayoutRounding
.
UPDATE
Мне просто нужно добавить, так как я видел это снова и снова... иногда SnapsToDevicePixels
работает, когда UseLayoutRounding
нет. Мне жаль, что я не могу сказать, почему это так, но сначала попробуйте UseLayoutRounding, и если это не сработает, не стесняйтесь попробовать SnapsToDevicePixels
.
Эта линия настолько резкая, что может вас отрезать!
Он должен использоваться для элементов управления или областей, где имеет место размещение пикселей. Одним из примеров может служить управление, связанное с холстом приложения рисования. Вы когда-нибудь видели карту фрагментированного диска? Это может быть еще один пример.
Единственное исключение, о котором я могу думать, это когда вы используете какие-то разделительные линии. В то время как большинство людей ожидают, что границы будут твердыми, если этот параметр выключен, они могут выглядеть размытыми и отвлекающими.
В принципе, если размытые края = плохие, тогда выключите его.
Один случай - если вы показываете изображение или видео. Если вы не привязаны к пикселям устройства (то есть к пикселям экрана видео), то некоторый алгоритм (интерполяция, сглаживание) используется для позиционирования ваших пикселей изображения "между" вашими пикселями экрана, а отображаемое изображение не будет выглядеть так же, как и исходное изображение. Изображение потеряет некоторую резкость.
Просто заметил, что это очень полезно для Borders. Дополнительная информация здесь.
<Style TargetType="Border" >
<Setter Property="SnapsToDevicePixels" Value="True" />
</Style>