我有一个应用程序在各个地方声明文本框,比如样式和数据窗口,现在我需要更改每个文本框的标准行为以获得和失去焦点。
这样做的好方法是什么?
我在考虑两种解决方案:一种是从TextBox派生一个新类,我理解这通常是不满意的。另一种是创建某种使用EventSetters的样式,但由于我的应用程序中的样式和数据窗口没有代码隐藏文件,我不知道事件如何找到适当的事件处理程序。
答案 0 :(得分:2)
您可以使用Key属性创建适用于所有TextBox的样式,如下所示:
<Style x:Key={x:Type TextBox}>
...
</Style>
然后,您可以修改TextBox的Template属性,并使用Triggers为OnGotFocus和OnLostFocus事件添加特殊行为。
答案 1 :(得分:2)
根据您的反馈,我建议使用如下附加行为:
<TextBox b:TextBox.SuppressOnFocus="True"/>
附加的行为实现只会附加到GotFocus和LostFocus,并根据需要清除/重新应用绑定。
答案 2 :(得分:0)
在正常情况下,我也会在继承TextBox时皱眉。在这种情况下,由于您正在更改TextBox的行为,因此子类可能是您的最佳选择。
答案 3 :(得分:0)
如果您只在一个项目中使用此功能,则可以创建具有TextBox的UserControl并访问OnFocus属性。您还可以创建一个自定义WPF控件,该控件从TextBox派生,然后实现LocusFocus事件。
我使用相同的方法创建了一个执行验证的用户控件TextBox: