我有一个需要更改边框颜色的TextBox,然后在文本框下面显示一条消息。应根据模型中的bool值显示/隐藏此消息。实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
有很多不同的方法可以做到这一点。如果您只打算这样做一次,最简单的方法是将TextBlock
添加到布局中并使用样式来隐藏它,例如:
<StackPanel>
<TextBox Text="{Binding Text, Mode=TwoWay}">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="BorderBrush" Value="Lightgray"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsValid}" Value="False">
<Setter Property="BorderBrush" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<TextBlock Text="This is the message displayed if IsValid is false.">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsValid}" Value="False">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
如果您希望能够重复此操作,则需要将其设置为模板或用户控件。
另外,请注意,将可见性从折叠更改为可见将更改整体布局,这可能会产生各种不良影响。根据您的设计,您可能会将可见性默认为隐藏。
答案 1 :(得分:0)
您可以使用DataTrigger
根据ViewModel中的值设置文本框的文本,可见性和外观。这似乎是最简单的解决方案。
<TextBox>
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=TheBoolean}" Value="True">
<Setter Property="Visibility" Value="Visible" />
<Setter Property="Background" Value="Red" />
...
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
另一种选择是创建IValueConverter
来转换bool以获取文本,可见性和颜色。