Я использую два метода для определения относительного размера. У меня есть класс Relative
с тремя прикрепленными свойствами To
, WidthPercent
и HeightPercent
это полезно, если я хочу, чтобы элемент был относительным размером элемента в любом месте визуального дерева и чувствовал себя менее хакерским, чем подход конвертера - хотя вы используете то, что работает для вас, что вы довольны.
Другой подход более хитрый. Добавьте туда, ViewBox
где вы хотите, чтобы относительные размеры были внутри, затем внутри этого, добавьте a Grid
на ширине 100. Затем, если вы добавите a TextBlock
с шириной 10 внутри, это, очевидно, 10% от 100.
ViewBox
Будет масштабировать в Grid
соответствии с любым пространством , которое было дано, так что если его единственное на странице, то Grid
будет масштабироваться полной шириной и эффективно, ваш TextBlock
масштабируются до 10% страницы.
Если вы не установите высоту, Grid
тогда она будет уменьшаться в соответствии с ее содержимым, поэтому все будет относительно небольшого размера. Вы должны будете убедиться, что содержимое не становится слишком высоким, т. Е. Начинает изменяться соотношение сторон пространства, выделенного для ViewBox
остального, иначе оно также начнет масштабировать высоту. Вы , наверное , можете обойти это с Stretch
из UniformToFill
.