12

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

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

谢谢

4

5 回答 5

17

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

在 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;
}

希望这对你也有用:)

于 2014-03-04T15:15:51.697 回答
1

我找到了解决方法,我的 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;
        }
    }
于 2012-10-17T07:01:03.800 回答
1

ListView 的默认行为BringIntoView()是点击后调用。您可以将事件处理程序添加到PreviewMouseDownevent 并通过 set 处理它e.Handled = true;

于 2012-10-17T06:33:35.433 回答
1

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

在此处输入图像描述

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

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

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

于 2018-09-06T13:22:47.557 回答
-2

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

于 2016-02-06T07:38:42.813 回答