【问题标题】:Setting Focus to a Control after the Loading of the DataGrid加载 DataGrid 后将焦点设置为控件
【发布时间】:2013-09-01 15:54:48
【问题描述】:

我在 WPF 中有一个 UserControl,它包含各种控件...最重要的是 DataGrid 控件。 DataGrid 控件绑定到一个 Observable Collection 列表。该列表根据用户选择的几个过滤器填充了不同的项目。现在,一旦 DataGrid 显示所有数据。我想在我的用户控件上的第一个(过滤器)组合框上设置焦点。有什么方法可以知道 DataGrid 何时完全加载???是否有任何我可以设置的 DataTrigger 可以触发以通​​知我 Grid 已使用新列表刷新,我可以将 ComboBox 设置为焦点。基本上,当重新填充 DataGrid 中的数据时,我无法将焦点设置到我的 UserControl 上的第一个控件...如果有人知道如何解决此问题,请告诉我! 提前致谢。

【问题讨论】:

    标签: wpf xaml datagrid


    【解决方案1】:

    我讨厌在代码后面工作,但有时这是唯一的方法。根据我的说法,这可以通过两种方式完成:

    1. 在完成过滤逻辑后,使用 EventAggregator 从 ViewModel 引发事件。在后面的视图代码和处理程序中收听此事件firstCombo.Focus()

    2. 第二个有点脏,所以必须有按钮或最后一个控件,然后在列表视图上应用过滤器。在 buttonClickHandler/或最后一个控件的任何事件(如 selectionchange)中直接执行firstCombo.Focus()。在这种情况下,您按下按钮的那一刻焦点将移动到组合。

    谢谢

    【讨论】:

    • 谢谢 Nit... 是的.. 我同意在后面的代码中工作有时是唯一的方法。但不幸的是,在这种情况下,您的两个建议都不起作用。原因是 Focus 似乎要去控件,但是当我的 observable 集合被渲染/显示时,它看起来又回到了数据网格。我做了以下操作,我处理了ScrollViewer.ScrollChanged,并在后面代码的附加函数中设置了firstCombo.Focus()。只要数据网格有元素并且垂直滚动条可见,它就可以工作。当计数为零时,此代码将不会命中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多