我有一个文本框,它需要改变它的边框颜色,然后在文本框下方显示一条消息。应根据模型中的布尔值显示/隐藏此消息。实现这一目标的最佳方法是什么?
问问题
2640 次
2 回答
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>
如果这是您希望能够重复的内容,您需要将其制作成模板或用户控件。
另外请注意,将可见性从折叠更改为可见会改变整体布局,这可能会产生各种不良影响。根据您的设计,您可能会将可见性默认设置为隐藏。
于 2011-06-10T20:41:30.967 回答
0
您可以使用 aDataTrigger
根据 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
来转换布尔值以获取文本、可见性和颜色。
于 2011-06-10T17:22:50.347 回答