XAML绑定到转换器

12

我想要做的事情相对简单。我只是想将椭圆形的 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'。

有人能否解释一下如何解决这个问题?编辑:是的,我已经将转换器添加为资源。

3个回答

18

您需要将转换器添加到资源中。

编辑
您还需要添加命名空间。

    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
@Albin - 应该是 Converter={StaticResource myMultiplyByFactor}。 - Geoff Appleford
1
我认为不必要进行负面评价,因为这个想法是正确的。 - Will Eddins
1
谢谢,Albin。我很感激你的细致。现在我已经让它工作了! - Adam S

18

你的代码有两个问题

1) 你的转换器需要使用 StaticResource 声明来访问。

<Binding Converter="{StaticResource myMultiplyByFactor}" 
    ElementName="EllipseOnlyLFA" Path="Height"  ConverterParameter="0.5"/

2) 默认情况下,您的转换器参数是一个字符串,因此您需要将其转换为双精度浮点数。

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;
}

0

参数可能作为字符串传递。在您的转换器中设置断点,查看valueparameter的值。您可能需要使用double.Parse而不是强制转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接