由于ValidationRule
不会从DependencyObject
继承,因此无法在自定义ValidationRule类中定义DependencyProperty
并将其绑定到相应的UI元素。
不过,我能想到的解决方案,可帮助您解决问题:
你仍然可以在自定义有效性规则类中定义的字符串属性(比如TargetUINameString
)并将其设置为每个UI元素这样的名字:
<TextBox Name="textbox1"...
<c:MyValidationRule TargetUINameString="textbox1"/>
...
静态属性(比如ActiveInstanceOfThis
)从添加到您的窗口,它授予您访问窗口类的活动实例。 (它在窗口的构造函数中设置为this
)
然后使用FindName解决这个问题:
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (value==null)
{
var uielement =
Window1.ActiveInstanceOfThis.stackPanel1.FindName(TargetUINameString)
as TextBox;
if(uielement!=null) uielement.Focus();
}
}
这是一个有点脏,但它的工程!