我创建了一个用户控件文本框,我想将文本块绑定到我在用户控件的文本框中键入的内容。我尝试了一些代码,但它不起作用。谁能教我?感谢
我的userControl TextBox:
<Grid Background="Silver" Style="{StaticResource EntryFieldStyle}" Width="175" Height="25" Margin="0" >
<TextBox Name="watermarkTextBox" Background="Green" />
</Grid>
我的xaml代码:
<StackPanel Orientation="Horizontal">
<UserControls:WatermarkTextBox x:Name="usernameArea"/>
<TextBlock Text="{Binding ElementName=usernameArea Path=watermarkTextBox.Text}" FontSize="13" Foreground="White"/>
</StackPanel>
答案 0 :(得分:1)
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中进行修改(以及一般的绑定)。
您可能还想将Foreground
的{{1}}(文本颜色)属性更改为比白色更深的内容,因为默认情况下,TextBlock
为白色。