TextBox.TextChanging 事件
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
当文本框中的文本开始更改时,但在呈现之前同步发生。
// Register
event_token TextChanging(TypedEventHandler<TextBox, TextBoxTextChangingEventArgs const&> const& handler) const;
// Revoke with event_token
void TextChanging(event_token const* cookie) const;
// Revoke with event_revoker
TextBox::TextChanging_revoker TextChanging(auto_revoke_t, TypedEventHandler<TextBox, TextBoxTextChangingEventArgs const&> const& handler) const;
public event TypedEventHandler<TextBox,TextBoxTextChangingEventArgs> TextChanging;
function onTextChanging(eventArgs) { /* Your code */ }
textBox.addEventListener("textchanging", onTextChanging);
textBox.removeEventListener("textchanging", onTextChanging);
- or -
textBox.ontextchanging = onTextChanging;
Public Custom Event TextChanging As TypedEventHandler(Of TextBox, TextBoxTextChangingEventArgs)
<TextBox TextChanging="eventhandler"/>
事件类型
示例
此示例演示如何处理 TextChanging 事件,以实现 TextBox 的简单自动完成。
<!-- Text box in MainPage.xaml -->
<TextBox x:Name="textBox" TextChanging="textBox_TextChanging"
Width="200" Height="32"/>
public sealed partial class MainPage : Page
{
// Boolean to keep track of whether or not you should ignore the next TextChanged event.
// This is needed to support the correct behavior when backspace is tapped.
public bool m_ignoreNextTextChanged = false;
// Sample list of strings to use in the autocomplete.
public string[] m_options = { "microsoft.com", "dev.windows.com", "msn.com", "office.com", "msdn.microsoft.com" };
public MainPage()
{
this.InitializeComponent();
}
private void textBox_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
// Needed for the backspace scenario.
if (m_ignoreNextTextChanged)
{
m_ignoreNextTextChanged = false;
return;
}
// All other scenarios other than the backspace scenario.
// Do the auto complete.
else
{
string s = textBox.Text;
if (s.Length > 0)
{
for (int i = 0; i < m_options.Length; i++)
{
if (m_options[i].IndexOf(s) >= 0)
{
if (s == m_options[i])
break;
textBox.Text = m_options[i];
textBox.Select(s.Length, m_options[i].Length - s.Length);
break;
}
}
}
}
}
protected override void OnKeyDown(KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Back
|| e.Key == Windows.System.VirtualKey.Delete)
{
m_ignoreNextTextChanged = true;
}
base.OnKeyDown(e);
}
}
注解
有关事件数据,请参阅 TextBoxTextChangingEventArgs。
TextChanging 事件在呈现新文本之前同步发生。 相反, TextChanged 事件是异步的,在呈现新文本后发生。
发生 TextChanging 事件时, Text 属性已反映新值 (但它不会呈现在 UI) 中。 通常处理此事件以在呈现文本之前更新 Text 值和所选内容。 这可以防止快速呈现、更新和重新呈现文本时可能发生的文本闪烁。
注意
这是一个同步事件,在不允许更改 XAML 可视化树时(例如在布局期间)时可能发生。 因此,应将 TextChanging 事件处理程序中的代码主要限制为检查和更新 Text 属性。 尝试执行其他操作(例如显示弹出窗口或添加/删除可视化树中的元素)可能会导致可能导致崩溃的致命错误。 建议在 TextChanged 事件处理程序中执行这些其他更改,或者将它们作为单独的异步操作运行。