是否可以修改文本框样式以使用特定的数据触发器



我有一个TextBox,它使用了所有TextBox通用的样式,所以我可以对所有TextBox使用相同的方面。

然而,在一个特定的TextBox中,我需要根据一个条件来修改它的可见性,所以我尝试这样做:

<TextBox 
Text="{Binding MyBinding, Mode=OneWay}"
Style="{StaticResource TextBoxStyle1}">
<TextBox.Style>
<Style TargetType="StackPanel">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=thisView, Path=DataContext.MyPropertyInViewModel}" Value="3">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>

问题是我不能两次设置样式,所以我不知道如何定义数据触发器来隐藏textBox。

我怎么能那样做?

谢谢。

删除Style="{StaticResource TextBoxStyle1}"并将BasedOn标记添加到新样式BasedOn="{StaticResource TextBoxStyle1}">

<TextBox 
Text="{Binding MyBinding, Mode=OneWay}">
<TextBox.Style>
<Style TargetType="StackPanel" BasedOn="{StaticResource TextBoxStyle1}">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=thisView, Path=DataContext.MyPropertyInViewModel}" Value="3">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>

这将允许您重用现有的样式。但是,如果现有样式已经定义了您不想要的DataTrigger,则需要为此文本框创建一个新样式。

最新更新