相关疑难解决方法(0)

WPF - 在ItemsSource更改时重置ListBox滚动位置

我目前有一个ListBox,其ItemsSource集合绑定到我的viewmodel上的一个属性,类型为IEnumerable.当preoprty的引用发生更改时,ListBox会按预期更新,但是我有一个问题,如果我有大量项目并滚动到ListBox的底部,然后将引用更改为包含,例如,1项目的另一个集合,ListBox视图为空,不显示滚动条.然后我必须用鼠标滚轮向上滚动列表框,直到1项进入视图.

因此,我认为我所追求的是,​​只要ItemsSource属性发生更改,就会将ListBox的滚动位置重置为顶部,这样无论收集的大小有多少,都会始终显示某些内容.

wpf scroll listbox itemssource

18
推荐指数
2
解决办法
8995
查看次数

WPF:MessageBox是否打破PreviewMouseDown?

我一直在尝试让我的WPF应用程序提示用户丢弃未保存的更改,或者在使用TreeView导航时取消.

我想我发现了一个错误.MessageBox与PreviewMouseDown不兼容.它似乎"处理"了一个点击,无论如何显示一个MessageBox,它的e.Handled是如何设置的.

对于这个XAML ......

<TreeView Name="TreeViewThings"
    ...
    PreviewMouseDown="TreeViewThings_PreviewMouseDown"
    TreeViewItem.Expanded="TreeViewThings_Expanded"
    TreeViewItem.Selected="TreeViewThings_Selected" >
Run Code Online (Sandbox Code Playgroud)

...比较这些替代方法......

Sub TreeViewNodes_PreviewMouseDown(...)
    e.Handled = False
End Sub

Sub TreeViewNodes_PreviewMouseDown(...)
    MessageBox.Show("Test", "Test", MessageBoxButton.OK)
    e.Handled = False
End Sub

这两种方法表现不同.没有MessageBox,TreeViewNodes_Selected()或者TreeViewThings_Expanded()会执行.使用MessageBox,他们不会.

这是一个错误还是在这里发生了一些我应该理解的事情?

.net wpf events messagebox

8
推荐指数
1
解决办法
2615
查看次数

当MessageBox出现时,Wpf停止路由事件?

PreviewMouseDown在TreeView上发生了一个事件,以确定用户是否可以根据某些逻辑选择其他项目.如果当前项目数据发生更改,将显示MessageBox,询问用户是否要放弃更改.如果用户按YES,我设置e.Handled = false;为启用新选择.如果用户按NO,我设置e.Handled = true;取消新选择.

问题是虽然我设置了e.Handled = false,但事件停止并且TreeView上没有选择事件.有人有解决方案吗?

提前致谢!

wpf routedevents

5
推荐指数
1
解决办法
1891
查看次数

标签 统计

wpf ×3

.net ×1

events ×1

itemssource ×1

listbox ×1

messagebox ×1

routedevents ×1

scroll ×1