【问题标题】:Simple WPF IValueConverter and DataTrigger not working together简单的 WPF IValueConverter 和 DataTrigger 不能一起工作
【发布时间】:2009-11-30 20:33:28
【问题描述】:

我在使用带有数据触发器的值转换器时遇到了问题。在我的一些代码中,DataTriggerPath 似乎被应用于根元素,而不是样式应用于的元素。

我创建了一个简单的测试用例,但我不明白它的行为。我预计Button 会变成红色或蓝色,具体取决于将哪个值馈送到DataTrigger 的转换器,但Button 根本没有受到影响!

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SimpleWpfApplication"
    x:Class="SimpleWpfApplication.SimpleUserControl"
    ToolTip="UserControl ToolTip">
    <UserControl.Resources>
        <local:SimpleConverter x:Key="SimpleConverter" />
    </UserControl.Resources>
    <Button ToolTip="Button ToolTip">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Style.Triggers>
                    <DataTrigger
                        Binding="{Binding Path=ToolTip, Converter={StaticResource SimpleConverter}}"
                        Value="Button ToolTip">
                        <Setter Property="Background" Value="Red" />
                    </DataTrigger>
                    <DataTrigger
                        Binding="{Binding Path=ToolTip, Converter={StaticResource SimpleConverter}}"
                        Value="UserControl ToolTip">
                        <Setter Property="Background" Value="Blue" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
</UserControl>

还有一个简单的转换器:

class SimpleConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new InvalidOperationException("SimpleConverter is a OneWay converter.");
    }
}

为什么不调用Convert?为什么Button 不会变成红色或蓝色?

【问题讨论】:

    标签: wpf datatrigger ivalueconverter


    【解决方案1】:

    在另一个 StackOverflow 问题中找到答案:What’s wrong with my datatrigger binding?

    答案是在绑定中添加RelativeSource={RelativeSource Self}

    <DataTrigger Binding="{Binding Path=ToolTip,
                           RelativeSource={RelativeSource Self},
                           Converter={StaticResource SimpleConverter}}" />
    

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 2018-06-19
      • 2021-11-14
      • 2012-07-11
      • 2013-09-24
      • 2016-10-18
      • 2014-01-01
      • 2015-04-30
      • 2014-09-09
      相关资源
      最近更新 更多