我正在使用.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的值。我应该如何实现这种行为?
答案 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
,则应继续正常显示。