我确信之前已经问过这个问题,但我没有很容易想出如何对查询进行说明。
我有这种风格;
<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>
我可以应用于Textboxes,当它们为空时有一个红色边框。它很棒,我可以将Style="{StaticResource TextBoxEmptyError}"
添加到控制标记中。但是如果我想用触发器应用这个样式,那么控件只能在某些条件下使用它(比如绑定是真的)?类似的东西:
<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>
此代码通过{"Style object is not allowed to affect the Style property of the object to which it applies."}
可以这样做吗?
编辑:如果使用Style触发器无法完成此操作,因为它会覆盖自身,是否有其他方式可以有条理地应用资源样式?
编辑:如果此操作有更合适的术语,我可以更改问题标题。
答案 0 :(得分:4)
无法从样式中的Setter设置样式,因为基本上第一个样式根本不会存在。
由于您正在寻找验证样式,我建议您查看Validation.ErrorTemplate
,但如果这不起作用,您可以更改触发器,以便修改特定属性,例如BorderBrush而不是Style属性< / p>
答案 1 :(得分:0)
我会考虑使用带有TemplateTrigger的模板,你可以根据条件将样式更改为你想要的样式