【发布时间】:2010-11-12 00:04:54
【问题描述】:
我想在列表视图中自动显示所选项目(不滚动就不可能显示所有项目)。
this.listView.SelectedIndex = 999;当然选择了一个项目,但它没有显示它。
我可以用什么来自动显示它?
亲切的问候,杰夫
【问题讨论】:
标签: wpf listview selecteditem
我想在列表视图中自动显示所选项目(不滚动就不可能显示所有项目)。
this.listView.SelectedIndex = 999;当然选择了一个项目,但它没有显示它。
我可以用什么来自动显示它?
亲切的问候,杰夫
【问题讨论】:
标签: wpf listview selecteditem
你可以这样做:-
listview.ScrollIntoView(listview.SelectedItem);
Scroll WPF ListBox to the SelectedItem set in code in a view model
【讨论】:
【讨论】:
安装一个nuget包System.Windows.Interactivity.WPF,创建如下类:
public class ScrollToSelectedListBoxItemBehaviour: 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:
<ListView ItemsSource="{Binding Items}">
<i:Interaction.Behaviors>
<behaviors:ScrollToSelectedListBoxItemBehaviour />
</i:Interaction.Behaviors>
</ListView>
【讨论】:
这可能会对您有所帮助,我不确定它是否是您要查找的内容,但它会显示所选项目并在必要时为您滚动到该项目。
int selectedIndex = listView.Items.IndexOf((listView.SelectedItems[0]))
listView.Items[selectedIndex].EnsureVisible();
【讨论】: