我想做的事情相对简单。我只是试图将椭圆上的TranslateTransform的Y元素绑定到椭圆的高度的1/2:
<Ellipse Name="EllipseOnlyLFA" Height="200" Fill="Yellow" HorizontalAlignment="Left" VerticalAlignment="Bottom" ClipToBounds="True">
<Ellipse.Width>
<Binding ElementName="EllipseOnlyLFA" Path="Height"/>
</Ellipse.Width>
<Ellipse.RenderTransform>
<TranslateTransform>
<TranslateTransform.Y>
<Binding Converter="MultiplyByFactor" ElementName="EllipseOnlyLFA" Path="Height" ConverterParameter="0.5"/>
</TranslateTransform.Y>
</TranslateTransform>
</Ellipse.RenderTransform>
</Ellipse>
我还有以下转换器:
public class MultiplyByFactor : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((double)value * (double)parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return true;
}
}
我在实际使用转换器的XAML线上收到错误。错误是
'设置属性 'System.Windows.Data.Binding.Converter' 抛出一个例外。'行号'22' 和行位置'8'。
任何人都可以了解如何做到这一点? 编辑:是的,我已将转换器添加为资源。
答案 0 :(得分:16)
您需要将转换器添加到资源
修改强>
您还需要添加命名空间
xmlns:c="clr-namespace:WpfApplication1"
结束修改
<Window.Resources>
<c:MultiplyByFactor x:Key="myMultiplyByFactor"/>
</Window.Resources>
然后您可以使用资源中的实例
<TranslateTransform.Y>
<Binding Converter={StaticResource myMultiplyByFactor}"
ElementName="EllipseOnlyLFA"
Path="Height" ConverterParameter="0.5"/>
</TranslateTransform.Y>
答案 1 :(得分:15)
您的代码有两个问题
1)您的转换器需要使用StaticResource
声明
<Binding Converter="{StaticResource myMultiplyByFactor}"
ElementName="EllipseOnlyLFA" Path="Height" ConverterParameter="0.5"/
2)您的converter参数默认为字符串,因此您需要将其转换为double
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
double.TryParse((parameter as string).Replace(',', '.'), NumberStyles.Any, CultureInfo.InvariantCulture, out double param);
return param * (double)value;
}
答案 2 :(得分:0)
参数可能作为String传递。在Converter中设置断点并查看value
和parameter
的值。您可能需要使用double.Parse而不是强制转换。