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}" .../>
添加dependency property 实质上允许您在用户控件中公开值以在 XAML 中进行修改(以及一般的绑定)。
您可能还想将TextBlock 的Foreground(文本颜色)属性更改为比白色更深的颜色,因为默认情况下Background 是白色的。