Спасибо levanovd за подсказку, как решить эту проблему. Вот мое решение этой проблемы, еще раз спасибо levanovd.
Создать конвертер
[ValueConversion(typeof(double), typeof(double))]
public class MultiplierConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
if (targetType != typeof(Double))
throw new Exception("Conversion not allowed.");
double f, m = (double)value;
string par = parameter as string;
if (par == null || !Double.TryParse(par, out f)) f = 1;
return m * f;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
if (targetType != typeof(Double))
throw new Exception("Conversion not allowed.");
double f, m = (double)value;
string par = parameter as string;
if (par == null || !Double.TryParse(par, out f)) f = 1;
return f == 0 ? float.NaN : m / f;
}
}
Добавить конвертер в ваш XAML
<Window.Resources>
<n:MultiplierConverter x:Key="MultiplierConverter"/>
</Window.Resources>
Добавить привязку между объектами, указав аргумент для множителя.
<StackPanel>
<Rectangle x:Name="source" Width="100" Height="100" Stroke="Black"/>
<Rectangle Width="100" Stroke="Black"
Height="{Binding ActualWidth, ElementName=source, Mode=Default,
Converter={StaticResource MultiplierConverter},
ConverterParameter=2}"/>
</StackPanel>
Теперь второй прямоугольник будет в два раза больше первого прямоугольника и может быть настроен с помощью ConverterParameter
. К сожалению, вы не можете связать ConverterParameter
с другим свойством, не зная, почему существует это ограничение.