Какие единицы измерения используют Silverlight и WPF? - PullRequest
13 голосов
/ 03 ноября 2010

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

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

Ответы [ 4 ]

26 голосов
/ 04 ноября 2010

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

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

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

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

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

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

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

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

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

20 голосов
/ 03 ноября 2010

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

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

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

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

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

2 голосов
/ 03 ноября 2010

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

1 голос
/ 03 ноября 2010

Это Независимые от устройства устройства .

Более подробные объяснения можно найти здесь.

...