1

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

我的用户控件文本框:

<Grid  Background="Silver" Style="{StaticResource EntryFieldStyle}"  Width="175" Height="25" Margin="0" >          
    <TextBox Name="watermarkTextBox" Background="Green"   />    
</Grid>

我的xml代码:

<StackPanel Orientation="Horizontal">
      <UserControls:WatermarkTextBox x:Name="usernameArea"/>
      <TextBlock Text="{Binding ElementName=usernameArea Path=watermarkTextBox.Text}"  FontSize="13" Foreground="White"/> 
</StackPanel>
4

1 回答 1

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}" .../> 

添加依赖属性本质上允许您在用户控件中公开值以在 XAML 中进行修改(以及通常的绑定)。


您可能还想将 的Foreground(文本颜色)属性更改为TextBlock比白色更暗的东西,因为默认情况下,Background是白色的。

于 2012-11-08T05:17:18.853 回答