我在 WPF 中有一个 ListView ,我的问题是如果某个项目已部分显示并且我点击了该项目,该列表将自动滚动,因此整个项目将是可见。
如何停用此自动滚动功能?
谢谢
答案 0 :(得分:12)
有同样的问题,我发现了一个闷闷不乐的事情:)。
在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;
}
希望这也适合你:)
答案 1 :(得分:1)
ListView的默认行为是在单击后调用BringIntoView()
。您可以向PreviewMouseDown
事件添加事件处理程序,并通过设置e.Handled = true;
来处理它。
答案 2 :(得分: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;
}
}
答案 3 :(得分:0)
按照Ekk的回答,您必须在父级listView上而不是在子级事件中处理BringIntoView事件。 例如,在我的特例中,我的listBox有一些运行时代码创建元素。这些基本上可以是文本框的堆栈面板,或者最后是按钮的堆栈面板。
尽管我只是添加了这些内容,但是
btnOk.RequestBringIntoView += (s,e) => { e.Handled = true; };
对每一个按钮的作用是,单击后它们没有被看到,但是与它们每个按钮相关联的动作立即被执行。
答案 4 :(得分:-2)
为列表视图设置ScrollViewer.VerticalScrollBarVisibility="Auto"
有帮助。