你可以用一个
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();
}
}
<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>