WPF 实现带提示文本控件
主窗体Xmal代码:
<Window x:Class="WPF0315c.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WPF0315c"
Title="MainWindow" Height="350" Width="525" Background="DarkGray">
<Grid>
<local:TipTextBox Width="140" Height="40" TipText="请输入密码..." VerticalContentAlignment="Center"></local:TipTextBox>
</Grid>
</Window>
添加一个用户控件TipTextBox,Xmal代码:
<TextBox x:Class="WPF0315c.TipTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WPF0315c"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="300" Name="MyTextBox">
<TextBox.Background>
<VisualBrush Stretch="None" AlignmentX="Left">
<VisualBrush.Visual>
<Border Background="White" Width="{Binding ElementName=MyTextBox, Path=ActualWidth}" Height="{Binding ElementName=MyTextBox, Path=ActualHeight}">
<TextBlock Margin="10 0 0 0" Text="{Binding ElementName=MyTextBox, Path=TipText}"
VerticalAlignment="{Binding ElementName=MyTextBox, Path=VerticalContentAlignment}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Opacity" Value="0"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=MyTextBox, Path=Text}" Value="">
<Setter Property="Opacity" Value="0.5"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Border>
</VisualBrush.Visual>
</VisualBrush>
</TextBox.Background>
</TextBox>
在用户控件中添加一个依赖属性:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WPF0315c
{
/// <summary>
/// TipTextBox.xaml 的交互逻辑
/// </summary>
public partial class TipTextBox : TextBox
{
public TipTextBox()
{
InitializeComponent();
}
public string TipText
{
get { return (string)GetValue(TipTextProperty); }
set { SetValue(TipTextProperty, value); }
}
// Using a DependencyProperty as the backing store for TipText. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TipTextProperty =
DependencyProperty.Register("TipText", typeof(string), typeof(TipTextBox), new PropertyMetadata(""));
}
}
运行效果: