Wpf 样式触发器以应用另一个样式

Wpf 样式触发器以应用另一个样式,wpf,triggers,styles,Wpf,Triggers,Styles,我肯定以前有人问过这个问题,但我一直没有轻松地弄清楚如何表达这个查询 我有这种风格 <SolidColorBrush x:Key="SemiTransparentRedBrushKey">#F0FF0000</SolidColorBrush> <Style x:Key="TextBoxEmptyError" TargetType="{x:Type TextBox}"> <Style.Triggers> <DataTri

我肯定以前有人问过这个问题,但我一直没有轻松地弄清楚如何表达这个查询

我有这种风格

<SolidColorBrush x:Key="SemiTransparentRedBrushKey">#F0FF0000</SolidColorBrush>
<Style x:Key="TextBoxEmptyError" TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text.Length}" Value="0">
            <Setter Property="BorderBrush" Value="{StaticResource ResourceKey=SemiTransparentRedBrushKey}"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

尽管
{“Style对象不允许影响其应用的对象的Style属性,但此代码引发异常。”}

这样的事情可以做吗

编辑:如果无法使用样式触发器完成此操作,因为它会覆盖自身,是否有其他方法可以有条件地应用资源样式


编辑:如果此操作有更合适的术语,我可以更改问题标题。

不能从样式中的Setter设置样式,因为这样基本上第一个样式就根本不存在了


由于您正在寻找验证样式,我建议您查看
Validation.ErrorTemplate
,虽然如果这不起作用,您可以更改触发器,使其修改特定的属性,例如BorderBrush,而不是Style属性

我会考虑将模板与TemplateTrigger一起使用,然后您可以根据任何情况将样式更改为您喜欢的样式

您考虑过使用
验证.ErrorTemplate
?请看:是的,但我认为对于我正在使用的某些表单来说,这是过度使用。这个问题的答案也将更适用于一般的样式使用,而不仅仅是我的红色错误边框。也有使用非错误相关样式(如粗体)的情况。我可以在每个控件中重新创建它们,但这似乎打破了干燥原则。如果以后要更新样式,我该怎么办?每个控件将其触发器绑定到不同的属性,因此每个控件样式设置器都需要单独更新,即使它们都相同。+1表示“样式不能从样式内的设置器设置”-我甚至没有注意到我这样做是错误的。
<TextBox.Style>
<Style TargetType="TextBox">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=ApprovedRequired}" Value="True">
            <Setter Property="Style" Value="{StaticResource TextBoxEmptyError}"></Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>