有条件地将样式应用于控件

时间:2012-09-05 06:52:50

标签: wpf xaml mvvm triggers styles

在MVVM项目中,我希望仅当viewmodel公开的属性设置为true时才将样式“ReadOnlyTextBox”应用于控件。 我以为我可以使用触发器但不幸的是我从这里学到了

Style Trigger to Apply another Style

在这里

How to make Style.Triggers trigger a different named style to be applied

我无法在样式定义中更改样式属性。我正在寻找一种简单的替代方法,否则我将使用触发器来应用样式“ReadOnlyTextBox”中包含的所有属性。我不喜欢这种方法,因为它违反了DRY原则,所以我希望你能提出别的建议。

由于 菲利普

2 个答案:

答案 0 :(得分:1)

如果您不是真的被迫使用触发器,那么实用的方法可能是使用IValueConverter将ViewModel-Value作为输入并返回所需的Style(类似于DataTemplateSelectors),然后执行类似

的操作
<UserControl.Resources>
<prefix:StyleConverter x:Key="styleConverter"/>
</UserControl.Resources>
<!-- blabla -->
<TextBox Style="{Binding SomeCondition, Converter={StaticResource styleConverter}}"/>
<!-- blabla -->

答案 1 :(得分:0)

您可以使用样式选择器根据自定义条件应用样式。

StyleSelector