1

我希望有一个人可以帮助我...

Josh Smith 写了一篇关于“使用 Model-View View-Model 的 WPF 应用程序”的精彩文章,并在他的文章中包含以下代码示例

如果您下载代码示例并运行应用程序并查看所有客户,然后选择一个公司(例如第四家公司),然后单击“创建新客户”(这将打开一个新客户的选项卡),然后单击返回“所有客户”选项卡,然后使用键盘尝试将所选项目上移一个到当前所选项目上的项目,它没有!相反,选择器再次从顶部开始。

我不确定为什么会发生这种情况,但我希望它在您单击时向上移动一项,而不是从列表顶部开始。我怀疑这与 FocusManager 有关,但不确定。

有谁知道为什么控件会以这种方式运行?是否有可能,我应该采取什么方法来修改此代码并使其不“重置”所选项目?

我已经基于此模板实现了一个项目,出于功能原因,我需要让键盘上下移动选择器而不重置它。

4

1 回答 1

1

在您提供的示例中,设置 IsSelected 属性不会影响逻辑焦点,因此默认情况下会设置焦点。我目前想到的解决方法是强制关注代码隐藏中的元素。例如,将处理程序添加到 listview 的 selectionchanged 中,如下所示:

  private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
    if (e.AddedItems.Count == 0 || e.RemovedItems.Count > 0) return;
    var item = (CustomerViewModel) e.AddedItems[0];
    var container = (UIElement) listView1.ItemContainerGenerator.ContainerFromItem(item);
    container.Focus();
  }
于 2010-02-06T19:54:46.813 回答