2011-07-25 17 views
3

我有一个带有RowValidationRules的WPF DataGrid。我想设置焦点或者在验证失败的情况下开始编辑特定的单元格。WPF DataGrid:在行验证错误后将焦点设置在特定单元格上

例如,如果单元格中的值低于另一个单元格中的值,并且用户不遵守此规则,则我想自动设置焦点并开始编辑第一个单元格。

什么是最优雅的方式来做到这一点?我注意到ValidationResult.ErrorContent属性通常用于显示错误消息,但由于它的类型是“object”,我可能会定制它以返回有关验证错误时应该获得焦点的单元的信息吗?我不知道如何恢复和使用XAML中的信息。

回答

0

由于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(); 
    } 
} 

这是一个有点脏,但它的工程!

相关问题