Edit2:一种方法是使用依赖属性以及实现 INotifyPropertyChanged。
将会发生的是,每次文本框的文本发生更改时,我们都会触发 PropertyChangedEvent。Window 窗口将通过访问 WatermarkTextBox 的 WatermarkText 依赖属性来订阅此事件。
这是它的外观:
WatermarkTextbox.xaml:
<TextBox Name="watermarkTextBox" ...
TextChanged="watermarkTextBox_TextChanged"/>
WatermarkTextbox.xaml.cs:
public partial class WatermarkTextBox : UserControl, INotifyPropertyChanged
{
...
public static readonly DependencyProperty WatermarkTextProperty =
DependencyProperty.Register("WatermarkTextProperty", typeof(String),
typeof(WatermarkTextBox), new PropertyMetadata(null));
public String WatermarkText
{
get { return watermarkTextBox.Text; }
set { OnPropertyChanged("WatermarkText"); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
private void watermarkTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
WatermarkText = this.watermarkTextBox.Text;
}
}
[主窗口].xaml:
<TextBlock Text="{Binding ElementName=usernameArea Path=WatermarkText}" .../>
添加依赖属性本质上允许您在用户控件中公开值以在 XAML 中进行修改(以及通常的绑定)。
您可能还想将 的Foreground
(文本颜色)属性更改为TextBlock
比白色更暗的东西,因为默认情况下,Background
是白色的。