Применение DataTrigger к кнопке, чья привязка происходит из другого элемента управления? - PullRequest
0 голосов
/ 14 мая 2009

Я пытаюсь применить DataTrigger к Button, и это зависит от свойства текущего выбранного элемента TreeView. Идея состоит в том, что я хочу изменить текст Button в зависимости от свойства выбранного элемента.

Что у меня выглядит так:

<Button x:Name="m_AddObject" Margin="192.708,0.909,6,6.363" Click="AddObject_Click" >
    <DataTrigger Binding="{Binding ElementName=ObjectTreeView, Path=SelectedItem.Removable}" Value="true">
        <Setter TargetName="m_AddObject" Property="Content" Value="Remove" />
    </DataTrigger>
</Button>

Но я не могу заставить его скомпилировать. Сеттер жалуется на недопустимость «Content», поскольку у него нет подходящего имени типа, но если я изменю его на «Button.Content», то он жалуется на «Ссылка на объект не установлена ​​на экземпляр объекта».

Я тоже пробовал:

<Setter TargetName="m_AddObject.Content" Value="Remove" />

Пока он компилируется, он тоже не работает.

Я в тупике.

Есть идеи?

Спасибо!

1 Ответ

1 голос
/ 14 мая 2009

DataTriggers должны быть определены в стиле для кнопки. То, что вы пытаетесь сделать выше, - это использование DataTriggers в качестве «метки» («Content», как выразился WPF) для кнопки (вместо, скажем, «OK»).

Это ad-hoc, поэтому оно может быть не совсем правильным, но оно ближе к тому, что вы хотите:

<Button x:Name="m_AddObject"
        Margin="192.708,0.909,6,6.363"
        Click="AddObject_Click">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=ObjectTreeView, Path=SelectedItem.Removable}" Value="True">
                    <Setter Property="Content" Value="Remove" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>
...