Я думаю, что вы, вероятно, могли бы найти способ сделать эту работу, сделав ScaleConverter сниженным с DependencyObject
, присвоив ему свойство зависимости ActualSize, поместив два его экземпляра в свои ресурсы вместо одного и выполнив привязка к источнику для привязки ActualSize одного экземпляра к ActualWidth
холста, а другого к его ActualHeight
(поэтому ActualSize экземпляра всегда синхронизируется с шириной / высотой холста при изменении размера холста).
Однако, это выглядит так, как будто вы действительно хотите чего-то простого: растянуть холст, чтобы заполнить его родителя. Если это так, посмотрите на Viewbox :
<Viewbox Stretch="Fill">
<Canvas Width="221" Height="203">
<Ellipse Canvas.Left="47" Canvas.Top="48" Height="155"
Stroke="Black" Width="174" Fill="#FF00C6C3" />
</Canvas>
</Viewbox>
Я включил Stretch="Fill"
, чтобы растянуть X и Y без сохранения соотношения сторон, так как это выглядело так, как вы хотели. Вам также нужно назначить ширину и высоту холсту, чтобы заставить это работать, поскольку холст по умолчанию не имеет естественного размера. Вышеупомянутый фрагмент устанавливает ширину и высоту, которые поместили бы ваш эллипс в нижний правый угол растянутого окна просмотра; возможно, вы захотите чего-то другого.
Одним из возможных недостатков Viewbox может быть масштабирование толщины обводки, поэтому, если вы сделаете окно коротким и широким, горизонтальные обводки будут худыми, а вертикальные обводки будут толстыми. Если это проблема, вам может потребоваться привязать данные.