gpt4 book ai didi

c# - WPF:具有在按下 Enter 键时触发的事件的 TextBox

转载 作者:IT王子 更新时间:2023-10-29 04:45:51 26 4
gpt4 key购买 nike

我没有将 PreviewKeyUp 事件附加到我的应用程序中的每个 TextBox 并检查按下的键是否为 Enter 键然后执行操作,我决定实现扩展TextBox 的版本,其中包含一个 DefaultAction 事件,该事件在 TextBox 中按下 Enter 键时触发。

我所做的基本上是创建一个新类,该类从 TextBox 扩展到一个公共(public)事件 DefaultAction,如下所示:

public class DefaultTextBoxControl:TextBox
{
public event EventHandler<EventArgs> DefaultAction = delegate { };

public DefaultTextBoxControl()
{
PreviewKeyUp += DefaultTextBoxControl_PreviewKeyUp;
}

void DefaultTextBoxControl_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key != Key.Enter)
{
return;
}
DefaultAction(this, EventArgs.Empty);
}
}

然后我从我的应用程序中使用这个自定义文本框,就像这样 (xaml):

<Controls:DefaultTextBoxControl  DefaultAction="DefaultTextBoxControl_DefaultAction">
</Controls:DefaultTextBoxControl>

现在,根据我在学习 WPF 方面的一点经验,我意识到几乎大多数时候都有一种“更酷”(希望更简单)的方式来实现事情

...所以我的问题是,如何改进上述控制? 或者是否有其他方法可以实现上述控制? ...也许只使用声明式代码而不是同时使用声明式 (xaml) 和过程式 (C#)?

最佳答案

看看this blog post几个月前,我将“全局”事件处理程序附加到 TextBox.GotFocus 以选择文本。

基本上你可以在你的 App 类中处理 KeyUp 事件,像这样:

protected override void OnStartup(StartupEventArgs e)
{
EventManager.RegisterClassHandler(typeof(TextBox),
TextBox.KeyUpEvent,
new System.Windows.Input.KeyEventHandler(TextBox_KeyUp));

base.OnStartup(e);
}

private void TextBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key != System.Windows.Input.Key.Enter) return;

// your event handler here
e.Handled = true;
MessageBox.Show("Enter pressed");
}

... 现在,您的应用程序中的每个 TextBox 都会在用户输入时调用 TextBox_KeyUp 方法。

更新

正如您在评论中指出的那样,这仅在每个 TextBox 需要执行相同代码时才有用。

要添加像 Enter 按键这样的任意事件,您最好查看 Attached Events .我相信这可以让你得到你想要的。

关于c# - WPF:具有在按下 Enter 键时触发的事件的 TextBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/816334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com