如何使用数据触发器来应用不同的样式属性

本文关键字:样式 属性 应用 何使用 数据 触发器 | 更新日期: 2023-09-27 17:56:33

到目前为止,我使用<Style.Triggers>DataTrigger,以便根据条件将不同的样式属性应用于项目(在本例中为TextBox)。

但是现在我想根据DataTrigger的条件将Style属性设置为我在其他地方定义的静态资源。

如果我使用 TextBox.Triggers,我会收到一个错误,我不能在其中使用数据触发器,只是 EventTriggers,这不是我想要的。

我应该如何处理?

如何使用数据触发器来应用不同的样式属性

似乎

至少在我的情况下已经通过样式继承找到了适当的解决方案。如果我这样定义样式

在下面的代码中,ReadOnlyTextBox是我通过defult拥有的样式,并且基于Datatrigger在我的一个属性上InEditMode重写 - 撤消它的一些默认样式属性,例如在默认ReadOnlyTextBox样式中设置的<Setter Property="IsReadOnly" Value="True" />

<TextBox.Style>
    <Style BasedOn="{StaticResource ReadOnlyTextBox}" TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding InEditMode}" Value="True">
                <Setter Property="IsReadOnly" Value="False" />
                <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
                <Setter Property="BorderThickness" Value="1"/>
                <Setter Property="Focusable" Value="True"/>
                <Setter Property="IsReadOnlyCaretVisible" Value="True"/>
                <Setter Property="KeyboardNavigation.IsTabStop" Value="True"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</TextBox.Style>