【问题标题】:ListBox with extended selection mode, bring selected in view具有扩展选择模式的列表框,将选定内容显示在视图中
【发布时间】:2013-06-15 00:27:00
【问题描述】:

我写这篇文章只是为了帮助其他可能面临同样问题的人。我有一个选择模式设置为扩展的列表框。在我的应用程序的某个用户故事中,我需要取消选择所有选定的项目,以编程方式仅选择一个项目并将其显示出来。好的,那里有很多示例,但由于某种原因,我的代码无法正常工作:如果所选项目被隐藏,则 SelectionChanged 事件与空的已添加项目集合一起出现。我的案例和那里的样本之间的区别在于选择模式......

【问题讨论】:

    标签: .net wpf listview listbox


    【解决方案1】:

    经过半天的挖掘,在一些看似无关的案例中,一些好人暗示了“非常直观”的解决方案:将列表框属性 ScrollViewer.CanContentScroll 设置为 False - 为什么我没有首先想到...?现在选择你最喜欢的方法,它会做它应该做的。仅供参考,这是我的解决方案:

    <ListBox Name="listUsers"
             SelectionMode="Extended"
             ScrollViewer.CanContentScroll="False"> <!-- more properties, template, ItemContainerStyle, etc.... -->
        <i:Interaction.Behaviors>
            <b:ScrollSelectedListBoxItemIntoViewBehavior />
        </i:Interaction.Behaviors>
    <ListBox>
    

    这是包装在行为中的事件处理程序:

    public class ScrollSelectedListBoxItemIntoViewBehavior : Behavior<ListBox>
    {
        protected override void OnAttached()
        {
            base.OnAttached();
            AssociatedObject.SelectionChanged += AssociatedObject_SelectionChanged;
        }
    
        protected override void OnDetaching()
        {
            AssociatedObject.SelectionChanged -= AssociatedObject_SelectionChanged;
            base.OnDetaching();
        }
    
        void AssociatedObject_SelectionChanged(
            object sender,
            SelectionChangedEventArgs e)
        {
            if (e.AddedItems == null || e.AddedItems.Count == 0)
                return;
    
            var listBoxItem = AssociatedObject.ItemContainerGenerator.ContainerFromItem(e.AddedItems[0]) as ListBoxItem;
    
            if (listBoxItem != null)
                listBoxItem.BringIntoView();
        }
    }
    

    希望这会为另一个不开心的人节省一些时间,或者有更多经验的人会提出更好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      相关资源
      最近更新 更多