DataGrid自带的ScrollViewer

xy_dl 2016-11-02 04:43:49
在DataGrid控件中,可以直接使用ScrollViewer,请问如何捕获这个ScrollViewer事件?
...全文
673 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xy_dl 2016-11-15
  • 打赏
  • 举报
回复
我再重新开个帖子吧。
xy_dl 2016-11-15
  • 打赏
  • 举报
回复
谢谢大家,可视化树的方法我已经明白了。 另外还有个问题,当我使用列虚拟化时(列非常多),scrollViewer滚动时列名会错乱。如何解决这个问题,请大家再帮忙,非常感谢。
Veary 2016-11-14
  • 打赏
  • 举报
回复
可视化树可以搞定 自己去搜 或看SlowlyHeart的博客
muzizongheng 2016-11-10
  • 打赏
  • 举报
回复
引用 13 楼 xy_dl 的回复:
[quote=引用 12 楼 muzizongheng 的回复:] [quote=引用 3 楼 xy_dl 的回复:] [quote=引用 2 楼 muzizongheng 的回复:] 2个办法: (1) 创建datagrid的控件模板, 然后在其中的scrollViewer的事件中添加处理函数. (2) 在view初始化的事件中, 比如loaded, 用可视树的方法获取到datagrid的scrollviewer,然后后台添加事件处理函数. 关键字: VisualTreeHelper, GetChild, ScrollViewer,
多谢回复!我用了方法(2),但是获取不到DataGrid的ScrollViewer,只能获取一个Border。 我之所以问这个问题,是因为我用EnableRowVirtulization=true后,当我拖动scrollViewer时,DataGrid列名的顺序会变乱(数据的顺序是正常的)。不知这个问题您是否有些建议,谢谢。 [/quote] 如果你的列不多的话, 建议把虚拟化去掉. 目前因为你用了虚拟化, 因此用可视化找的时候它还没真正创建, 因此找不见. 要么你可以在控件真正渲染完后再用可视树的方法去找. duanzi_Peng说的思路是: wpf有附加事件, 如果你的内部有这个控件, 理论上会路由到父节点, 前提是子元素没有事件处理函数.(e.Handle = true) 因此你可以试试附加事件这个思路, 百度搜 wpf 附加事件 [/quote]我的列非常多,有100多列,如果EnableColumnVirtulization=false,垂直滚动时非常慢;如果EnableColumnVirtulization=true,水平滚动时列名就会乱掉。不知该从哪里着手解决?[/quote] 嗯, 具体已经解释过了. 模板里添加event, 或者用附加事件.
xy_dl 2016-11-09
  • 打赏
  • 举报
回复
引用 12 楼 muzizongheng 的回复:
[quote=引用 3 楼 xy_dl 的回复:] [quote=引用 2 楼 muzizongheng 的回复:] 2个办法: (1) 创建datagrid的控件模板, 然后在其中的scrollViewer的事件中添加处理函数. (2) 在view初始化的事件中, 比如loaded, 用可视树的方法获取到datagrid的scrollviewer,然后后台添加事件处理函数. 关键字: VisualTreeHelper, GetChild, ScrollViewer,
多谢回复!我用了方法(2),但是获取不到DataGrid的ScrollViewer,只能获取一个Border。 我之所以问这个问题,是因为我用EnableRowVirtulization=true后,当我拖动scrollViewer时,DataGrid列名的顺序会变乱(数据的顺序是正常的)。不知这个问题您是否有些建议,谢谢。 [/quote] 如果你的列不多的话, 建议把虚拟化去掉. 目前因为你用了虚拟化, 因此用可视化找的时候它还没真正创建, 因此找不见. 要么你可以在控件真正渲染完后再用可视树的方法去找. duanzi_Peng说的思路是: wpf有附加事件, 如果你的内部有这个控件, 理论上会路由到父节点, 前提是子元素没有事件处理函数.(e.Handle = true) 因此你可以试试附加事件这个思路, 百度搜 wpf 附加事件 [/quote]我的列非常多,有100多列,如果EnableColumnVirtulization=false,垂直滚动时非常慢;如果EnableColumnVirtulization=true,水平滚动时列名就会乱掉。不知该从哪里着手解决?
xy_dl 2016-11-08
  • 打赏
  • 举报
回复
引用 9 楼 duanzi_peng 的回复:
引用 8 楼 xy_dl 的回复:
[quote=引用 7 楼 duanzi_peng 的回复:] [quote=引用 5 楼 xy_dl 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] ScrollBar.Scroll=""
请问,这个是什么意思?
DataGrid 里的方法[/quote]为什么我的DataGrid没有这个方法?[/quote] 那都不清楚了[/quote]那这个方法有什么用呢?
  • 打赏
  • 举报
回复
引用 8 楼 xy_dl 的回复:
引用 7 楼 duanzi_peng 的回复:
[quote=引用 5 楼 xy_dl 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] ScrollBar.Scroll=""
请问,这个是什么意思?
DataGrid 里的方法[/quote]为什么我的DataGrid没有这个方法?[/quote] 那都不清楚了
xy_dl 2016-11-08
  • 打赏
  • 举报
回复
引用 7 楼 duanzi_peng 的回复:
引用 5 楼 xy_dl 的回复:
[quote=引用 4 楼 duanzi_peng 的回复:] ScrollBar.Scroll=""
请问,这个是什么意思?
DataGrid 里的方法[/quote]为什么我的DataGrid没有这个方法?
  • 打赏
  • 举报
回复
引用 5 楼 xy_dl 的回复:
引用 4 楼 duanzi_peng 的回复:
ScrollBar.Scroll=""
请问,这个是什么意思?
DataGrid 里的方法
muzizongheng 2016-11-08
  • 打赏
  • 举报
回复
引用 3 楼 xy_dl 的回复:
[quote=引用 2 楼 muzizongheng 的回复:] 2个办法: (1) 创建datagrid的控件模板, 然后在其中的scrollViewer的事件中添加处理函数. (2) 在view初始化的事件中, 比如loaded, 用可视树的方法获取到datagrid的scrollviewer,然后后台添加事件处理函数. 关键字: VisualTreeHelper, GetChild, ScrollViewer,
多谢回复!我用了方法(2),但是获取不到DataGrid的ScrollViewer,只能获取一个Border。 我之所以问这个问题,是因为我用EnableRowVirtulization=true后,当我拖动scrollViewer时,DataGrid列名的顺序会变乱(数据的顺序是正常的)。不知这个问题您是否有些建议,谢谢。 [/quote] 如果你的列不多的话, 建议把虚拟化去掉. 目前因为你用了虚拟化, 因此用可视化找的时候它还没真正创建, 因此找不见. 要么你可以在控件真正渲染完后再用可视树的方法去找. duanzi_Peng说的思路是: wpf有附加事件, 如果你的内部有这个控件, 理论上会路由到父节点, 前提是子元素没有事件处理函数.(e.Handle = true) 因此你可以试试附加事件这个思路, 百度搜 wpf 附加事件
  • 打赏
  • 举报
回复
引用 10 楼 xy_dl 的回复:
引用 9 楼 duanzi_peng 的回复:
[quote=引用 8 楼 xy_dl 的回复:] [quote=引用 7 楼 duanzi_peng 的回复:] [quote=引用 5 楼 xy_dl 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] ScrollBar.Scroll=""
请问,这个是什么意思?
DataGrid 里的方法[/quote]为什么我的DataGrid没有这个方法?[/quote] 那都不清楚了[/quote]那这个方法有什么用呢?[/quote] 不会msdn或者百度?再这样问都没意思了
xy_dl 2016-11-07
  • 打赏
  • 举报
回复
引用 2 楼 muzizongheng 的回复:
2个办法: (1) 创建datagrid的控件模板, 然后在其中的scrollViewer的事件中添加处理函数. (2) 在view初始化的事件中, 比如loaded, 用可视树的方法获取到datagrid的scrollviewer,然后后台添加事件处理函数. 关键字: VisualTreeHelper, GetChild, ScrollViewer,
多谢回复!我用了方法(2),但是获取不到DataGrid的ScrollViewer,只能获取一个Border。 我之所以问这个问题,是因为我用EnableRowVirtulization=true后,当我拖动scrollViewer时,DataGrid列名的顺序会变乱(数据的顺序是正常的)。不知这个问题您是否有些建议,谢谢。
xy_dl 2016-11-07
  • 打赏
  • 举报
回复
引用 3 楼 xy_dl 的回复:
[quote=引用 2 楼 muzizongheng 的回复:] 2个办法: (1) 创建datagrid的控件模板, 然后在其中的scrollViewer的事件中添加处理函数. (2) 在view初始化的事件中, 比如loaded, 用可视树的方法获取到datagrid的scrollviewer,然后后台添加事件处理函数. 关键字: VisualTreeHelper, GetChild, ScrollViewer,
多谢回复!我用了方法(2),但是获取不到DataGrid的ScrollViewer,只能获取一个Border。 我之所以问这个问题,是因为我用EnableRowVirtulization=true后,当我拖动scrollViewer时,DataGrid列名的顺序会变乱(数据的顺序是正常的)。不知这个问题您是否有些建议,谢谢。 [/quote]上面写错了,是EnableColumnVirtualization="True"。
xy_dl 2016-11-07
  • 打赏
  • 举报
回复
引用 4 楼 duanzi_peng 的回复:
ScrollBar.Scroll=""
请问,这个是什么意思?
  • 打赏
  • 举报
回复
ScrollBar.Scroll=""
muzizongheng 2016-11-05
  • 打赏
  • 举报
回复
2个办法: (1) 创建datagrid的控件模板, 然后在其中的scrollViewer的事件中添加处理函数. (2) 在view初始化的事件中, 比如loaded, 用可视树的方法获取到datagrid的scrollviewer,然后后台添加事件处理函数. 关键字: VisualTreeHelper, GetChild, ScrollViewer,
xy_dl 2016-11-04
  • 打赏
  • 举报
回复
会WPF的人好少啊

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧