Ответ 1
Хорошие ответы Спенсера и Мартина на при, чтобы выровнять ваши пиксели.
Что касается как: я также хотел бы указать, что в WPF 4.0 попробуйте использовать свойство UseLayoutRounding
вместо SnapsToDevicePixels
.
UseLayoutRounding
делает то, что вы делаете совместимым с Silverlight (SnapsToDevicePixels
недоступно в Silverlight)... и Microsoft также поощряет использование UseLayoutRounding
over SnapsToDevicePixels
в своем .
В чем разница между этими двумя? Что ж, большое различие заключается в том, что UseLayoutRounding
происходит во время фазы компоновки, а SnapsToDevicePixels
происходит во время фазы визуализации. Это заставляет меня предположить, что UseLayoutRounding
, вероятно, более эффективный способ пойти (я еще не подтвердил это).
Все, что сказано, все равно будут причины использовать SnapsToDevicePixels
. Фактически, документация MSDN указывает на один. Я добавлю другое: только с SnapsToDevicePixels
вы можете использовать рекомендации для точного управления.
Вот некоторые ресурсы по этому вопросу (например, пиксельная привязка и четкость с изображениями, текстом и визуальными эффектами):
- Документация MSDN для свойства UIElement.SnapsToDevicePixels.
- Документация MSDN для свойства FrameworkElement.UseLayoutRounding.
- Вот старый классический пост от Dwayne Need на размытых изображениях.
- Иногда BitmapScalingMode помогает с ясностью изображения.
- Отличное сообщение в блоге, в котором показано, как на самом деле использовать SnapsToDevicePixels. Это может быть сложно.
- Сообщение блога WPF Text в блоге обо всех различных улучшениях, которые они добавили в WPF 4.0, чтобы помочь в ясности текста.
- Еще одно сообщение в блоге WPF Text команды по округлению макета.
Хех. Я знаю, что мой ответ был немного больше, чем то, о чем вы просили... но эта концепция (то есть независимость от резолюции и возникающие в результате проблемы, которые она вызывает и как их преодолеть) часто может быть точкой разочарование при работе с WPF. По крайней мере, я хотел указать вам на новое свойство WPF 4.0, UseLayoutRounding
.
UPDATE
Мне просто нужно добавить, так как я видел это снова и снова... иногда SnapsToDevicePixels
работает, когда UseLayoutRounding
нет. Мне жаль, что я не могу сказать, почему это так, но сначала попробуйте UseLayoutRounding, и если это не сработает, не стесняйтесь попробовать SnapsToDevicePixels
.
Эта линия настолько резкая, что может вас отрезать!