更改用户控件上的文本绑定会触发文本更改事件,但不会检测到新文本

Changing Text Binding on User Control fires text changed event but doesnt detect the new text

我有一个自定义 WPF 文本框用户控件。我正在写一些内容,但它总是检测到 XAML 上预设的相同数据,执行 textbox.Text get 调用不会显示新写入的文本。

public partial class SearchBox : UserControl
{
    public SearchBox()
    {
        InitializeComponent();
        this.DataContext = this;
    }

    private void TextBox_GotFocus(object sender, RoutedEventArgs e)
    {
        if (sender is TextBox textBox && textBox.Tag.ToString() == textBox.Text)
            textBox.Clear();
    }
    private void TextBox_LostFocus(object sender, RoutedEventArgs e)
    {
        if (sender is TextBox textBox && string.IsNullOrEmpty(textBox.Text))
            textBox.Text = textBox.Tag.ToString();
    }

    public string Text { get; set; }

    public event TextChangedEventHandler TextChanged;
    private void TextBox_TextChanged(object sender, TextChangedEventArgs args)
    {
        TextChangedEventHandler h = TextChanged;
        if (h != null)
        {
            h(this, args);
        }
    }
}

它需要如何工作:

<v:SearchBox x:Name="searchBox" TextChanged="searchBox_TextChanged" Text="Input a keyword to filter..." Tag="Input a keyword to filter..." HorizontalAlignment="Left"/>

用户在文本框“测试”上写入 --> textbox.Text returns“输入要过滤的关键字...”

感谢您的帮助!

您的 class 继承自 UserControl 而不是 TextBox

虽然您没有为 SearchBox 分享您的 XAML,但我假设您有一个 TextBox,您希望从中获取文本。问题是,属性 SearchBox.Text 不同于 SearchBox.TextBox.Text。因此,即使您更改 TextBox 中的文本,SearchBox.Text 仍然保持不变。

解决方案:使用 SearchBox.TextBox.Text 作为结果。