wpf listview失去了焦点

时间:2009-04-09 06:31:30

标签: wpf listview

我在WPF中有一些奇怪的ListView控件行为。

我们正在用C#开发应用程序。

我用一些项创建了ListView,并将SelectedIndex设置为某个索引 列表中间。然后我在ListView上的任何地方点击鼠标 然后用Up / Dows键盘键导航,一切都很完美。但如果 我将焦点移动到另一个控件,然后尝试将焦点设置回ListView 以编程方式控制,然后我就遇到了问题。

ListView获得焦点,但是当我尝试使用 键盘,当前选择将被取消,第一个项目将被取消 选中并导航将从列表中的第一个项目开始。

我通过调用它的.Focus()方法将焦点设置到ListView控件。

它甚至看起来像是ListView控件,但实际上没有任何项目 焦点,即使SelectedIndex有一些有效值。

请帮帮我!如何以编程方式将焦点设置为ListView控件 防止这种行为?

我发现我的listview选择索引与焦点项不同。 谁????

在selectedindex_changed事件中,我将所选索引设置为修复项目(5),但是当我按箭头键时,项目已更改。这意味着所选索引固定为5,但当前项目(以其周围的点边框显示)移动到箭头键位置。 无论如何,我的选择项固定为5,但我的滚动视图移动到当前项目的位置。

此代码位于listView1_SelectionChanged中: listView1.SelectionMode = SelectionMode.Single;             listView1.SelectedIndex = 5;

我的listview有一个修改过的视图:                                                                                                           

    <l:PlainView x:Key="tileView"
            ItemTemplate="{StaticResource centralTile}"
            ItemHeight="120" ItemWidth="130" />

我不再了解这个问题了。

问候

1 个答案:

答案 0 :(得分:6)

ListView可能会遇到与ListBox相同的问题,因为它可以独立于其项目而拥有焦点。

当我想要关注ListBox时,我需要做这样的事情:

listBox1.Focus();
if (listBox1.Items.Count > 0)
{
    var index = listBox1.SelectedIndex;
    if (index < 0) index = 0;

    var item = listBox1.ItemsContainerGenerator
                   .ContainerFromIndex(index) as ListBoxItem;
    item.Focus();
}

因此,这会聚焦ListBox,但是如果ListBox包含任何项目,它会聚焦所选项目,或者如果选择了一个项目,则聚焦第一项。

我从未在WPF中使用过ListView,但可能你可以使用ListView而不是ListBox和ListViewItem代替ListBoxItem来破解类似的方法。