【问题标题】:XAML Binding to a converterXAML 绑定到转换器
【发布时间】:2018-07-10 17:33:44
【问题描述】:

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

谁能解释一下如何做到这一点? 编辑:是的,我已将转换器添加为资源。

【问题讨论】:

    标签: c# wpf data-binding


    【解决方案1】:

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

    编辑
    你也需要添加命名空间

        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>
    

    【讨论】:

    • @Albin - 应该是 Converter={StaticResource myMultiplyByFactor}
    • 我认为没有必要投反对票,因为这里的想法是正确的。
    • 谢谢,阿尔宾。我很欣赏你的彻底。我现在可以工作了!
    【解决方案2】:

    您的代码有 2 个问题

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-10
        相关资源
        最近更新 更多