如何将用户控件的文本框中的文本绑定到文本块?

时间:2012-11-08 03:27:32

标签: c# wpf data-binding user-controls

我创建了一个用户控件文本框,我想将文本块绑定到我在用户控件的文本框中键入的内容。我尝试了一些代码,但它不起作用。谁能教我?感谢

我的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>

1 个答案:

答案 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为白色。