用户控件属性触发子控件

5

根据我的UserControl的IsEnabled属性(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 中,其中绘制了一条 Path:
    <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

使用DataTrigger而不是普通的TriggerDataTrigger用于内部属性更改,它具有一个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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接