이 문제를 해결하는 방법에 대한 힌트를 제공 한 Levanovd에게 감사드립니다. 다음은이 문제에 대한 해결책입니다. 다시 감사의 말을 전하십시오.
는
<Window.Resources>
<n:MultiplierConverter x:Key="MultiplierConverter"/>
</Window.Resources>
는 승수 인수를 지정 객체 사이의 바인딩 추가하여 XAML로 변환
[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;
}
}
컨버터를 추가를 만듭니다.
<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
을 다른 속성에 바인딩 할 수는 없지만 그 제한이 존재하는 이유는 확실하지 않습니다.
환상적인, 그 levanovd 주셔서 감사합니다, 난 그냥 변환기를 만든 다른 사람들이 다른 인터페이스 요소에 바인딩하려는 경우 내 질문에 대한 해결책을 추가합니다. –