You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义WPF用户控件触发TextChanged但无法获取新输入文本

问题根因

你自定义控件的Text是普通CLR属性,不具备WPF属性系统的变更通知能力,且和控件内部的TextBox的输入内容没有建立同步关联:用户输入的内容只会更新内部TextBox的Text值,不会同步到你自定义的SearchBox.Text属性,因此读取时永远返回XAML初始化时的预设值。

解决方案

你需要将Text改为依赖属性,并建立内部TextBox和该属性的双向绑定,步骤如下:

1. 替换普通Text属性为依赖属性

修改后台SearchBox.xaml.cs代码,将原来的public string Text { get; set; }替换为依赖属性定义:

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

    // 新增Text依赖属性定义
    public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
        nameof(Text),
        typeof(string),
        typeof(SearchBox),
        new FrameworkPropertyMetadata(default(string), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)
    );

    public string Text
    {
        get => (string)GetValue(TextProperty);
        set => SetValue(TextProperty, value);
    }

    // 原有其他逻辑保留不变
    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 event TextChangedEventHandler TextChanged;
    private void TextBox_TextChanged(object sender, TextChangedEventArgs args)
    {
        TextChanged?.Invoke(this, args);
    }
}

2. 绑定内部TextBox的Text到自定义属性

修改SearchBox.xaml中内部TextBox的定义,添加Text的双向绑定:

<TextBox
    x:Name="InnerTextBox"
    Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}"
    GotFocus="TextBox_GotFocus"
    LostFocus="TextBox_LostFocus"
    TextChanged="TextBox_TextChanged"
    <!-- 你原有其他样式、Tag等属性保持不变 -->
    />

这里指定UpdateSourceTrigger=PropertyChanged是为了让用户每输入一个字符就同步更新SearchBox.Text,而不是等到TextBox失去焦点才更新。

修改完成后,用户输入的内容会实时同步到SearchBox.Text,调用searchBox.Text就能拿到最新的输入值。

内容的提问来源于stack exchange,提问作者Manolo Martinez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:24:04