我在我的应用程序中不想为每个TextBox
附加PreviewKeyUp
事件并检查按下的键是否为Enter键,然后执行操作。相反,我决定实现一个扩展版本的TextBox
,其中包括在TextBox
中按下Enter键时触发DefaultAction事件。
我所做的基本上是创建一个从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#)的代码?