Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Что касается как: я также хотел бы указать, что в 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.

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

<Style TargetType="Border" >
        <Setter Property="SnapsToDevicePixels" Value="True" />
</Style>