【问题标题】:Focus is not set in UserControl WPF在 UserControl WPF 中未设置焦点
【发布时间】:2011-06-25 13:54:01
【问题描述】:

我无法将焦点设置在用户控制项上 我在用户控件中使用 DataGrid 我想将焦点放在 DataGrid 的第一行

我找到了以下代码

int index = 0;

dgAccountInfo.SelectedItem = winAccountInfoGrid.dgAccountInfo.Items[index];
dgAccountInfo.ScrollIntoView(winAccountInfoGrid.dgAccountInfo.Items[index]);

DataGridRow dgrow = (DataGridRow)dgAccountInfo.ItemContainerGenerator.ContainerFromIndex(index);

if (dgrow != null)
{
   dgAccountInfo.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next))
};

通过运行上面的代码,我发现 ContainerFromIndex 方法总是返回 null

为了摆脱空问题,我发现以下链接

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/ab95dd62-995f-481a-a765-d5efff1d559c/

我使用上面的链接解决了空问题,但仍然没有在数据网格上设置焦点

感谢您阅读我的问题

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    看来,在您使用的代码中,您正在将数据绑定到其他东西,如果您只想将焦点设置到第一项,这是不必要的。如果您的唯一目的是设置数据网格的焦点(选定索引),则可以在一个代码块中完成。

    if (dgAccountInfo.HasItems){    
      dgAccountInfo.SelectedIndex = 0;
    }
    

    if 构造确保您的数据网格中确实包含项目(否则,下一行代码将引发异常)。如果数据网格有项目,它会执行结构内的代码。如果数据网格没有项目,它会直接跳过代码。

    即使你从不打算在你的数据网格中没有任何项目,你也应该包含这个 if 构造,以防发生某些事情

    在 if 构造中,您将数据网格的 SelectedIndex 设置为第一项。请记住,与列表框一样,数据网格是“从零开始的”,这意味着第一项的索引为零。要在数据网格中不选择任何内容,请将所选索引设置为“-1”

    最后,设置“SelectedIndex”比设置“SelectedItem”可靠得多,因为数据网格中的项目通常会发生变化。

    如果你愿意,如果你想在数据网格没有项目的情况下做其他事情,你可以在上面的代码中包含一个#else 语句(就在 endif 上面)。

    我希望这会有所帮助!

    【讨论】:

    • 是的。我使用 MSDN 来交叉检查我的语法。如果您知道一些我不知道的事情,那么编辑我的帖子或在您的评论/答案中进行更正可能会更有效率。
    • 您在代码块中混合了伪预处理器 #ifif 语句,在 C# 伪预处理器中只允许简单检查是否定义了符号.此外,在 C# 中,= 是赋值而不是关系运算符。 == 是合适的相等运算符。我觉得编辑您的代码不合适,因为它从根本上看起来与 C# 格格不入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2013-02-28
    • 2010-10-10
    • 1970-01-01
    • 2011-09-17
    • 2010-11-26
    相关资源
    最近更新 更多