博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF学习笔记(5):两个DataGrid的滚动条实现同步滚动(转)
阅读量:4328 次
发布时间:2019-06-06

本文共 2327 字,大约阅读时间需要 7 分钟。

效果

效果:两个DataGrid的滚动条实现同步滚动。

 

代码参考了博客园chuncn的文章《.net中同步多个ScrollViewer滚动的四种方法》,原文是针对ListBox的。现改为针对DataGrid,略微作了修改,代码以水平滚动条为例。

原文地址:

 

实现方法:

方法一:利用DependencyProperty类的RegisterAttached方法,在属性系统上注册附加属性,并将滚动条属性值HorizontalOffset通过注册属性关联到一个方法。

ScrollViewer sv1, sv2;private void Window_Loaded(object sender, RoutedEventArgs e){    //分别获取两个DataGrid的ScrollViewer     sv1 = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(this.DataGrid1, 0), 0) as ScrollViewer;    sv2 = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(this.DataGrid2, 0), 0) as ScrollViewer;    //将滚动条属性值HorizontalOffset关联到OnScrollChanged1方法     var offsetChangeListener = DependencyProperty.RegisterAttached("ListenerOffset1", typeof(object), typeof(UserControl), new PropertyMetadata(OnScrollChanged1));    var binding = new Binding("HorizontalOffset") { Source = sv1 };    sv1.SetBinding(offsetChangeListener, binding);    offsetChangeListener = DependencyProperty.RegisterAttached("ListenerOffset2", typeof(object), typeof(UserControl), new PropertyMetadata(OnScrollChanged2));    binding = new Binding("HorizontalOffset") { Source = sv2 };    sv2.SetBinding(offsetChangeListener, binding);}public void OnScrollChanged1(DependencyObject sender, DependencyPropertyChangedEventArgs e){    double a = (double)e.NewValue;  //获取滚动条位置变化后的属性值    sv2.ScrollToHorizontalOffset(a);}public void OnScrollChanged2(DependencyObject sender, DependencyPropertyChangedEventArgs e){    double a = (double)e.NewValue;    sv1.ScrollToHorizontalOffset(a);}

 

方法二:利用滚动条的ScrollChanged事件,同步两个滚动条的位置。

ScrollViewer sv1, sv2;
private void Window_Loaded(object sender, RoutedEventArgs e){    //分别获取两个DataGrid的ScrollViewer    sv1 = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(this.DataGrid1, 0), 0) as ScrollViewer;    sv2 = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(this.DataGrid2, 0), 0) as ScrollViewer;    //关联ScrollChanged事件    sv1.ScrollChanged += new ScrollChangedEventHandler(sv1_ScrollChanged);    sv2.ScrollChanged += new ScrollChangedEventHandler(sv2_ScrollChanged);}void sv1_ScrollChanged(object sender, ScrollChangedEventArgs e){    sv2.ScrollToHorizontalOffset(sv1.HorizontalOffset);}void sv2_ScrollChanged(object sender, ScrollChangedEventArgs e){    sv1.ScrollToHorizontalOffset(sv2.HorizontalOffset);}

转载于:https://www.cnblogs.com/LiZhongZhongY/p/10879462.html

你可能感兴趣的文章
这个大学时代的博客不在维护了,请移步到我的新博客
查看>>
GUI学习之二十一——QSlider、QScroll、QDial学习总结
查看>>
nginx反向代理docker registry报”blob upload unknown"解决办法
查看>>
gethostbyname与sockaddr_in的完美组合
查看>>
kibana的query string syntax 笔记
查看>>
旋转变换(一)旋转矩阵
查看>>
thinkphp3.2.3 bug集锦
查看>>
[BZOJ 4010] 菜肴制作
查看>>
C# 创建 读取 更新 XML文件
查看>>
KD树
查看>>
VsVim - Shortcut Key (快捷键)
查看>>
C++练习 | 模板与泛式编程练习(1)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>