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