更改TextBox的标准行为?

时间:2009-07-14 16:06:09

标签: c# wpf textbox

我有一个应用程序在各个地方声明文本框,比如样式和数据窗口,现在我需要更改每个文本框的标准行为以获得和失去焦点。

这样做的好方法是什么?

我在考虑两种解决方案:一种是从TextBox派生一个新类,我理解这通常是不满意的。另一种是创建某种使用EventSetters的样式,但由于我的应用程序中的样式和数据窗口没有代码隐藏文件,我不知道事件如何找到适当的事件处理程序。

4 个答案:

答案 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:

http://www.highoncoding.com/Articles/578_Creating_WPF_TextBox_UserControl_to_Perform_Custom_Validation.aspx