3

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

我创建了一个简单的测试用例,但我不了解它的行为。我希望'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变成红色或蓝色?

4

1 回答 1

8

在另一个 StackOverflow 问题中找到了答案:我的数据触发器绑定有什么问题?

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

<DataTrigger Binding="{Binding Path=ToolTip,
                       RelativeSource={RelativeSource Self},
                       Converter={StaticResource SimpleConverter}}" />
于 2009-11-30T21:02:47.650 回答