在WPF ListView中自动滚动部分显示的项目
我在WPF中有一个列表视图,我的问题是,如果某个项目部分显示,我单击该项目,列表将自动滚动,以便整个项目都可见 如何禁用此自动滚动功能在WPF ListView中自动滚动部分显示的项目,wpf,listview,scroll,Wpf,Listview,Scroll,我在WPF中有一个列表视图,我的问题是,如果某个项目部分显示,我单击该项目,列表将自动滚动,以便整个项目都可见 如何禁用此自动滚动功能 谢谢单击ListView后,它的默认行为是callBringIntoView()。您可以将事件处理程序添加到PreviewMouseDown事件中,并通过设置e.Handled=true来处理它我找到了一个解决方法,我的ListView正在MVVM中显示照片项目 private void lv_PreviewMouseDown(object sender, Mo
谢谢单击ListView后,它的默认行为是call
BringIntoView()
。您可以将事件处理程序添加到PreviewMouseDown
事件中,并通过设置e.Handled=true来处理它代码>我找到了一个解决方法,我的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;
}
}
有同样的问题,我发现了一个问题:)
在Xaml中,使用以下EventSetter为ListViewItem定义样式:
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="RequestBringIntoView" Handler="ProjectListView_OnRequestBringIntoView"/>
</Style>
</ListView.ItemContainerStyle>
希望这也适用于您:)设置ScrollViewer.VerticalScrollBarVisibility=“Auto”
对于帮助的列表视图。按照Ekk的回答,您必须在子事件中处理bringIntoView事件,而不是在父列表视图中处理。
例如,在我的特殊情况下,我的listBox有一些运行时代码创建元素。这些基本上可以是文本框的stackpanel,也可以是按钮的stackpanel
尽管这些都是如何制作的,我只是补充了一点
btnOk.RequestBringIntoView += (s,e) => { e.Handled = true; };
对于每一个事件,其效果是,单击后,它们没有进入视图,但与它们关联的操作立即被执行。您是否有事件处理程序订阅此事件,或者您需要使用它执行其他操作?我只需要ListView像往常一样工作,只是我需要删除此BringIntoView行为此行为总是在引发click事件后发生。你必须选择。另一种可能的方法是创建一个自定义控件并覆盖OnPreviewMouseDown
。总体而言:这是唯一的方法,捕获PreviewMouseDown并执行您喜欢的操作:)在我的情况下,我希望项目滚动到视图中,但我希望它被选中。在我的处理程序中,我只是设置了新的选择,并保留e.handled=false。很好!完美的正是我想要的:-)
btnOk.RequestBringIntoView += (s,e) => { e.Handled = true; };