首先来一发图:
今天主要说的textBox内部给予提示:
使用自定义控件方式:TextBoxTip继承TextBox
利用TextBox的背景画刷功能
VisualBrush是一种比较特殊的笔刷,它的功能仍然是用来给元素填充图案,但它的内容却可以是各种控件。
你可以将其理解为一个普通的容器,但在其内部的所有控件都会失去交互能力,而只保留显示能力。
<TextBox.Background>
<VisualBrush Stretch="None" AlignmentX="Left">
<VisualBrush.Transform>
<TranslateTransform X="5" Y="0"/>
</VisualBrush.Transform>
<VisualBrush.Visual>
<TextBlock x:Name="PART_EmptyText" Grid.Column="0" Text="{TemplateBinding TooTipText}"
FontSize="12" Visibility="Collapsed" Foreground="{TemplateBinding Foreground}"
Focusable="False"/>
</VisualBrush.Visual>
</VisualBrush>
</TextBox.Background>
在背景色上给予一个画刷,使用textBlock来显示要提示的文本。
使用条件触发控制画刷的显示与隐藏:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsFocused,ElementName=PART_Text}" Value="False"/>
<Condition Binding="{Binding Path=Text,ElementName=PART_Text}" Value=""/>
</MultiDataTrigger.Conditions>
<Setter TargetName="PART_EmptyText" Property="Visibility" Value="Visible"/>
</MultiDataTrigger>
当TextBox失去焦点和文本内容为“”等两个条件成立时 画刷显示。
文本内部还放置了一个Button用于Clear
<Button Grid.Column="1" x:Name="Xbtn" ToolTip="Clear" Visibility="{TemplateBinding XButtonVisibility}" VerticalAlignment="Center" Margin="7 0" Command="{x:Static local:TextBoxTip.XButtonCommand}" Style="{StaticResource XCloseButton}"/>
给Button注册Command事件
/// <summary> /// Since we're using RoutedCommands for the increase/decrease commands, we need to /// register them with the command manager so we can tie the events /// to callbacks in the control. /// </summary> private static void InitializeCommands() { XButtonCommand = new RoutedCommand("XButtonCommand", typeof(TextBoxTip)); CommandManager.RegisterClassCommandBinding(typeof(TextBoxTip), new CommandBinding(XButtonCommand, CloseButtonCommand)); } public static void CloseButtonCommand(Object sender, ExecutedRoutedEventArgs e) { TextBoxTip control = sender as TextBoxTip; if (control != null) { control.Text = ""; } } public static RoutedCommand XButtonCommand { set; get; }