我有一个应用程序在不同的地方声明文本框,如样式和数据模板,现在我处于需要更改每个文本框的标准行为以获得和失去焦点的情况。更改TextBox的标准行为?
这样做的好方法是什么?
我想到了两个解决方案:一个是从TextBox派生一个新的类,我知道这个类通常是被忽视的。另一种是创建某种使用EventSetter的风格,但由于我的应用程序中的样式和数据模板没有隐藏文件,我不知道事件如何找到适当的事件处理程序。
我有一个应用程序在不同的地方声明文本框,如样式和数据模板,现在我处于需要更改每个文本框的标准行为以获得和失去焦点的情况。更改TextBox的标准行为?
这样做的好方法是什么?
我想到了两个解决方案:一个是从TextBox派生一个新的类,我知道这个类通常是被忽视的。另一种是创建某种使用EventSetter的风格,但由于我的应用程序中的样式和数据模板没有隐藏文件,我不知道事件如何找到适当的事件处理程序。
您可以创建适用于所有文本框使用Key属性如下样式:
<Style x:Key={x:Type TextBox}>
...
</Style>
然后,您可以修改文本框的模板属性,并使用触发器特殊行为添加到OnGotFocus和OnLostFocus事件。
在正常情况下,我也会在继承TextBox的时候皱眉。在这种情况下,由于您正在更改TextBox的行为,因此子类可能是您的最佳选择。
根据您的意见,我会建议使用附加的行为如下:
<TextBox b:TextBox.SuppressOnFocus="True"/>
的附加行为实施只会重视的GotFocus和LostFocus和清晰/重新绑定适当。
如果您打算仅在一个项目中使用此功能,则可以创建具有TextBox并访问OnFocus属性的UserControl。您还可以创建一个自定义WPF控件,该控件从TextBox派生并实现LocusFocus事件。
我用同样的方法来创建执行验证用户控件文本框:
出于好奇:为什么从文本框获得普遍非议吗? – Tim 2009-07-14 16:11:43
@Tim:我想知道同样的事情。 – Treb 2009-07-14 16:29:17
我的印象是,即使不是大多数,通过派生一个新类可以实现的功能实际上可以通过事件来完成。 – djcouchycouch 2009-07-14 17:06:36