0

我有一个文本框,它需要改变它的边框颜色,然后在文本框下方显示一条消息。应根据模型中的布尔值显示/隐藏此消息。实现这一目标的最佳方法是什么?

4

2 回答 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 回答