Какие единицы измерения используются Silverlight и WPF?

Кто-нибудь знает, какие единицы измерения используются Silverlight/WFP? Например, если я создаю новую кнопку и устанавливаю ее высоту до 150, то это 150 пикселей? точки? миллиметры?

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

Ответ 1

В документации MSDN говорится, что свойство FrameworkElement.Height (для Silverlight) относится к:

Высота в пикселях объекта

Однако для WPF это относится к:

независимое от устройства устройство измерения (1/96 дюйма)

Итак, чтобы ответить на ваш вопрос... пиксели для Silverlight, независимые от устройства устройства для WPF.

Ответ 2

Хотя теоретически 1 единица в WPF составляет 1/96 дюйма, что часто бывает не на практике.

Это обычно верно при печати. Но это редко бывает на экране. Причина этого в том, что Windows почти всегда знает истинное разрешение принтера, но почти никогда не знает истинного разрешения экрана.

Например, у меня есть три экрана, прикрепленные к моему компьютеру. Windows думает, что все они имеют разрешение 96 пикселей на дюйм. На самом деле они этого не делают. Два из них имеют разрешение 101 пиксель на дюйм, а разрешение - 94 пикселя на дюйм. (Почему? Потому что Windows не имеет возможности работать с истинными разрешениями для себя, и я этого не говорил. Выдуманность, что все они имеют одинаковый размер пикселей, близка к истине и оказывается удобной фикцией. )

Итак, когда я создаю, скажем, прямоугольник в WPF с шириной и высотой, установленный в 96, размер прямоугольника фактически зависит от того, на каком экране он появляется. Windows думает, что все 3 экрана имеют разрешение 96 пикселей на дюйм, и поэтому он будет отображать прямоугольник как 96 пикселей в высоту и ширину независимо от того, на каком экране он появляется. Это заставило бы его показаться 0.95 дюймами в высоту на двух экранах и 1.02 дюйма в высоту на третьем.

Таким образом, на практике это означает, что юниты в WPF на моем компьютере здесь - это 1/100-й дюйм, или 1/94-й дюйм на практике. (На практике размер 1 единицы в WPF равен размеру 1 пикселя на моей конкретной установке, независимо от того, насколько велики пиксели.)

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

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

Следовательно, нет надежного ответа на вопрос: 1 единица в WPF может быть почти что угодно на экране. (На практике большую часть времени он оказывается равным 1 пикселю, просто потому, что если вы не говорите Windows ни о чем другом, по умолчанию предполагается, что ваши экраны имеют пиксели высотой 1/96 дюйма, что то же, что и 1 блок WPF, и для большинства настольных экранов это, скорее всего, будет хорошим догадкой, но это не универсально. В системах, сконфигурированных с тем, что раньше называлось "большими шрифтами", вы найдете другое номинальное разрешение экрана и 1 блок WPF будут соответствовать чуть более 1 физическому пикселю - фактически на 1,2.)

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

Ответ 3

Документация относится к пикселям, однако это пиксели, где есть 96 таких пикселей на дюйм. Линия ширины 96 при отображении на дисплее 120 DPI будет составлять 120 фактических пикселей устройства. Аналогично такая линия, нарисованная на выходе принтера, который имеет 600 DPI, будет иметь длину 600 пикселей.

Ответ 4

Они независимые от устройства устройства.

Ниже вы можете найти более подробные объяснения .