UserControl WPF中未设置焦点

时间:2011-02-11 13:49:25

标签: c# wpf

我无法将注意力设置在用户控制项上 我在用户控件中使用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

为了摆脱null问题,我找到了以下链接

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

我使用上面的链接出现了null问题,但仍没有在数据网格上设置焦点

感谢您阅读我的问题

1 个答案:

答案 0 :(得分:-1)

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

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

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

即使你从来没有计划在你的数据网格中没有任何项目,你也应该包括这个if构造,但是有可能发生某些事情

在if结构中,您将datagrid的SelectedIndex设置为第一个项目。请记住,与列表框一样,数据网格是基于零的,"意味着第一个项目的索引为零。要在数据网格中不选择任何内容,请将所选索引设置为" -1"

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

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

我希望这有帮助!