更改用户控件上的文本绑定会触发文本更改事件,但不会检测到新文本
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
作为结果。
我有一个自定义 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
作为结果。