Если вы не укажете ширину или высоту эллипса, значениями по умолчанию будет «Авто». В сочетании со значениями по умолчанию HorizontalAlignment / VerticalAligment «Растянуть» это должно привести к тому, что эллипс «растянется» на ширину и высоту своего контейнера (с постоянной толщиной хода).
Свойства * ContentAlignment родительского контейнера могут влиять на это поведение, но, опять же, значения по умолчанию, неустановленные значения должны дать вам желаемое поведение.
Редактировать : пересмотр моего предложения, потому что я не понял, что эллипс должен оставаться кругом (не волнуйтесь, я решил взять копию «Чтение для понимания»).
Я предлагаю вам связать свойства ширины и высоты эллипса с MultiBinding свойств ActualWidth и ActualHeight родительского контейнера. Затем реализуйте «многозначный преобразователь», который будет возвращать минимальное значение из мульти-привязки.
Так что конвертер может выглядеть так:
class MinimumValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return values.Cast<double>().Min();
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
И свойства эллипса могут быть связаны следующим образом:
<Window.Resources>
<l:MinimumValueConverter x:Key="MinimumValueConverter" />
</Window.Resources>
<Ellipse Stroke="Black" StrokeThickness="1">
<Ellipse.Width>
<MultiBinding Converter="{StaticResource MinimumValueConverter}">
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UIElement}}" Path="ActualWidth" />
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UIElement}}" Path="ActualHeight" />
</MultiBinding>
</Ellipse.Width>
<Ellipse.Height>
<MultiBinding Converter="{StaticResource MinimumValueConverter}">
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UIElement}}" Path="ActualWidth" />
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UIElement}}" Path="ActualHeight" />
</MultiBinding>
</Ellipse.Height>
</Ellipse>