Триггер свойства UserControl для дочернего элемента управления - PullRequest
5 голосов
/ 10 января 2011

В зависимости от свойства IsEnabled моего UserControl (true / false), я хочу, чтобы элементы управления внутри него имели разные цвета. Я хочу сделать это с помощью «магии» XAML.

<UserControl.Resources>
    <Style x:Key="EnableDependent" TargetType="{x:Type Shape}">
        <Style.Triggers>
            <Trigger Property="{Binding Path=IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="True">
                <Setter Property="Stroke" Value="White" />
            </Trigger>
            <Trigger Property="{Binding Path=IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="False">
                <Setter Property="Stroke" Value="Black" />
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

Стиль применяется в ViewBox, где рисуется путь:

    <Viewbox  Grid.Column="3" Width="18" Margin="5,5,2,5" MouseEnter="Dispatch_MouseEnter" DockPanel.Dock="Right" Stretch="Uniform">
        <Path Data="M0,1 L4,1 M2,0 L4,1 L2,2" Stretch="Fill" StrokeThickness="3" Width="12" Height="12" Style="{StaticResource EnableDependent}" />
    </Viewbox>

Я получаю исключение времени выполнения, что нельзя установить привязку в свойстве триггера «Свойство».

Так как же это сделать?

1 Ответ

17 голосов
/ 10 января 2011

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

<Style x:Key="EnableDependent" TargetType="{x:Type Shape}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="True">
            <Setter Property="Stroke" Value="White" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="False">
            <Setter Property="Stroke" Value="Black" />
        </DataTrigger>
    </Style.Triggers>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...