带有数据绑定的TextBox在空时应显示帮助文本

时间:2010-09-24 20:20:09

标签: c# wpf data-binding

我正在使用.NET Framework 3.5在C#中处理应用程序。我的一个表单上有一个TextBox,它绑定到表单的DataContext的“ID”属性,如下所示:

<TextBox x:Name="txtID" 
    Grid.Row="0" Grid.Column="1" 
    Margin="2" MinWidth="200" VerticalAlignment="Top"
    Style="{StaticResource validationToolTip}"
    >
    <TextBox.Text>
        <Binding Path="ID" UpdateSourceTrigger="PropertyChanged"    
            ValidatesOnDataErrors="true">
            <Binding.ValidationRules>
                <ui:RequiredFieldValidationRule />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

当ID属性为空且TextBox没有输入焦点时,我希望TextBox显示一些帮助文本(“[留空以自动生成。]”)。我正在考虑将此文本设置为不同(斜体),以区别于用户输入的ID。但是,由于TextBox.Text属性绑定到ID属性,因此我想确保我的解决方案不会将ID属性设置为my helper string的值。我应该如何实现这种行为?

2 个答案:

答案 0 :(得分:0)

最简单的方法是在文本框上放置一个标签以包含文本,或者使用工具提示来显示文本 另一种方法是让一个类位于控件和当前绑定的数据类之间。如果数据类中的文本为空,则此类可以传递所需的'[留空以自动生成。]'文本,如果不是,则传递该值。对于所有其他字段,值只是传递

答案 1 :(得分:0)

这是一种直截了当的方法,可以简单地转换为控件模板或用户控件:

<Grid>
  <TextBox 
     Foreground="LightGray" 
     Focusable="False"
     Text="This is the help text."/>
  <TextBox 
     Focusable="True"
     Text="The help text only displays if this is empty.">
    <TextBox.Style>
      <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
        <Style.Triggers>
          <DataTrigger 
             Binding="{Binding RelativeSource={RelativeSource Self}, Path=Text}"                   
             Value="">
            <Setter Property="Background" Value="Transparent"/> 
          </DataTrigger>
        </Style.Triggers>             
      </Style>
    </TextBox.Style>
  </TextBox>
</Grid>

请注意,此处设置的内部样式基于TextBox的默认样式,因此,如果全局重新设置TextBox,则应继续正常显示。