【问题标题】:Annoying auto scroll of partially displayed items in WPF ListViewWPF ListView 中部分显示项目的烦人自动滚动
【发布时间】:2012-10-17 06:25:14
【问题描述】:

我在 WPF 中有一个 ListView,我的问题是如果一个项目部分显示并且我单击项目,列表将自动滚动,因此整个项目将可见。

如何禁用此自动滚动功能?

谢谢

【问题讨论】:

    标签: wpf listview scroll


    【解决方案1】:

    有同样的问题,我发现了一个问题:)

    在 Xaml 中,您使用此 EventSetter 为 ListViewItem 定义样式:

    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
             <EventSetter Event="RequestBringIntoView" Handler="ProjectListView_OnRequestBringIntoView"/>
        </Style>
    </ListView.ItemContainerStyle>
    

    在后面的代码中:

    private void ProjectListView_OnRequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
    {
        e.Handled = true;
    }
    

    希望这对你也有用:)

    【讨论】:

    • 就我而言,我希望该项目滚动到视图中,但我希望它被选中。在我的处理程序中,我只是设置新选择并保留 e.handled=false。效果很好!
    • 完美!正是我想要的:-)
    【解决方案2】:

    ListView 的默认行为是点击后调用BringIntoView()。您可以为PreviewMouseDown 事件添加一个事件处理程序,并通过设置e.Handled = true; 来处理它。

    【讨论】:

    • 您是否有事件处理程序订阅此事件或者您需要使用它来执行其他操作?
    • 我只需要 ListView 像往常一样工作,只需要删除这个 BringIntoView 行为
    • 此行为总是在点击事件引发之后发生。你必须选择。另一种可能的方法是创建一个自定义控件并覆盖OnPreviewMouseDown
    • 总体:这是唯一的方法,捕获 PreviewMouseDown 并做你喜欢的事情:)
    【解决方案3】:

    我找到了解决方法,我的 ListView 在 MVVM 中显示照片项

    private void lv_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            var p=e.OriginalSource as FrameworkElement;
            if (p != null && p.DataContext is **Photo**)
            {
                lv.SelectedItem = p.DataContext;
                e.Handled = true;
            }
        }
    

    【讨论】:

      【解决方案4】:

      按照 Ekk 的回答,您必须在子事件中而不是在父 listView 上处理 bringIntoView 事件。 例如,在我的特殊情况下,我的 listBox 有一些运行时代码创建元素。这些基本上可以是文本框的堆栈面板,或者最后是按钮的堆栈面板。

      尽管这些是如何制作的,但我只是添加了

      btnOk.RequestBringIntoView += (s,e) => { e.Handled = true; };
      

      对于其中的每一个,效果是,在单击之后,它们并没有被看到,但与它们相关的动作被立即执行。

      【讨论】:

        【解决方案5】:

        为列表视图设置ScrollViewer.VerticalScrollBarVisibility="Auto" 有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-06
          • 2016-01-09
          • 1970-01-01
          相关资源
          最近更新 更多