而不是附加一个PreviewKeyUp
事件与每个TextBox
在我的应用程序中,检查按下的键是否是 Enter 键,然后执行操作,我决定实现一个扩展版本TextBox
其中包括一个 DefaultAction 事件,该事件在按下 Enter 键时触发TextBox
.
我所做的基本上是创建一个新的类,该类扩展自TextBox
与公共活动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#)?
看一下这篇博文 http://www.madprops.org/blog/wpf-textbox-selectall-on-focus/从几个月前我附加一个“全局”事件处理程序到TextBox.GotFocus
选择文本。
本质上你可以处理KeyUp
您的 App 类中的事件,如下所示:
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
方法,当用户输入时。
Update
正如您在评论中指出的那样,只有在每个TextBox
需要执行相同的代码。
要添加任意事件(例如 Enter 按键),您最好研究一下附属活动 http://msdn.microsoft.com/en-us/library/bb613550.aspx。我相信这可以让你得到你想要的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)