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