Ответ 1
Вы можете сделать это с помощью MultiBinding
и нового IMultiValueConverter
:
public class RectangleConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
// you can pass in the value to divide by if you want
return new Rect(0, 0, (double)values[0], (double)values[1] / 3.33);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
И используется так же в вашем XAML:
<lcl:RectangleConverter x:Key="rectConverter" />
...
<RectangleGeometry>
<RectangleGeometry.Rect>
<MultiBinding Converter="{StaticResource rectConverter}">
<Binding Path="ActualWidth" RelativeSource="{RelativeSource AncestorType={x:Type Button}}" />
<Binding Path="ActualHeight" RelativeSource="{RelativeSource AncestorType={x:Type Button}}" />
</MultiBinding>
</RectangleGeometry.Rect>
</RectangleGeometry>