Простой WPF IValueConverter и DataTrigger не работают вместе - PullRequest
3 голосов
/ 30 ноября 2009

У меня были проблемы с использованием преобразователя значений с триггером данных. В некоторых моих кодах кажется, что DataTrigger Path применяется к корневому элементу, а не к элементу, к которому применяется стиль.

Я создал простой тестовый пример, и я не понимаю его поведение. Я ожидаю, что 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 не становится красным или синим?

...