WPF ListView展示选中项

8

我希望能够自动显示列表视图中所选项(如果不滚动,无法显示所有项)。

this.listView.SelectedIndex = 999; 当然可以选择一个项目,但它并不会显示出来。

我应该使用什么方法才能自动显示所选项?

谢谢,Jeff

4个回答

11

3

2023年.NET 5-7更新

安装一个nuget包Microsoft.Xaml.Behaviors.Wpf,创建一个如下的类:

using Microsoft.Xaml.Behaviors;
using System.Windows.Controls;
using System.Windows;

public class ScrollToSelectedListBoxItemBehavior: Behavior<ListBox>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        AssociatedObject.SelectionChanged += AssociatedObjectOnSelectionChanged;
        AssociatedObject.IsVisibleChanged += AssociatedObjectOnIsVisibleChanged;
    }

    protected override void OnDetaching()
    {
        AssociatedObject.SelectionChanged -= AssociatedObjectOnSelectionChanged;
        AssociatedObject.IsVisibleChanged -= AssociatedObjectOnIsVisibleChanged;
        base.OnDetaching();
    }

    private static void AssociatedObjectOnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        ScrollIntoFirstSelectedItem(sender);
    }

    private static void AssociatedObjectOnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ScrollIntoFirstSelectedItem(sender);
    }

    private static void ScrollIntoFirstSelectedItem(object sender)
    {
        if (!(sender is ListBox listBox)) 
            return;
        var selectedItems = listBox.SelectedItems;
        if (selectedItems.Count > 0)
            listBox.ScrollIntoView(selectedItems[0]);
    }
}

转到XAML编辑器,我们需要添加一行代码:
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"

将此行为类添加到ListView控件中:
<ListView ItemsSource="{Binding Items}">
    <i:Interaction.Behaviors>
        <local:ScrollToSelectedListBoxItemBehavior />
    </i:Interaction.Behaviors>
</ListView>

这个运行得非常好。新的包是Microsoft.Xaml.Behaviors.Wpf,因为System.Windows.Interactivity.WPF已经被弃用了。 - Skint007


-1

这可能会对你有所帮助,我不确定它是否是你在寻找的,但如果需要,它会将选定的项目带入视图并为您滚动到该位置。

 int selectedIndex = listView.Items.IndexOf((listView.SelectedItems[0]))

 listView.Items[selectedIndex].EnsureVisible();

1
这是一个WinForms的方法,不是吗! - Ahmad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接