首页 > 其他分享 >WPF实现两个DataGrid列表的滚动条同步

WPF实现两个DataGrid列表的滚动条同步

时间:2023-05-23 17:56:33浏览次数:45  
标签:DataGrid scroll2 scroll1 滚动条 FindVisualChildren child WPF

实现目标:

左右两个DataGrid对比显示,希望拖动一个列表的滚动条,就把别一个列表的滚动条移动到相应位置。

 

主要思路是:

通过FindVisualChildren找到两个DataGrid的ScrollViewer控件,然后注册两个控件的ScrollChanged事件,只要有一个ScrollViewer的VerticalOffset值变了,就相应地修改另一个ScrollViewer的值。

 

示例代码:

var scroll1 = FindVisualChildren<ScrollViewer>(LeftList).First();
var scroll2 = FindVisualChildren<ScrollViewer>(RightList).First();
scroll1.ScrollChanged += (s, e) =>
{
    scroll2.ScrollToVerticalOffset(scroll1.VerticalOffset);
};
scroll2.ScrollChanged += (s, e) =>
{
    scroll1.ScrollToVerticalOffset(scroll2.VerticalOffset);
};

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
    if (depObj != null)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(depObj, i);

            if (child != null && child is T chi)
                yield return chi;

            foreach (T childOfChild in FindVisualChildren<T>(child))
                yield return childOfChild;
        }
    }
}

 

标签:DataGrid,scroll2,scroll1,滚动条,FindVisualChildren,child,WPF
From: https://www.cnblogs.com/wzwyc/p/17425967.html

相关文章

  • easyui datagrid 标题换行
     .datagrid-header-row.datagrid-cellspan{white-space:normal!important;word-wrap:normal!important;}.datagrid-header.datagrid-cell{height:auto;line-height:20px;} ......
  • 【element-plus】Table表格横向滚动条显示不正确解决办法
    滚动条bug展示如下:造成bug原因排查:由于对Table表格进行了二次封装,传递props属性时,传递了align属性,代码实现如下图:解决办法删除align属性,滚动条样式正常回显在二次封装组件时,需要保证组件属性的输入和透出,尽量避免不必要的bug......
  • xiaofeng.NET系列之 netcore c#快速导出数据CSV格式 winfrom wpf
    一个导出buttonnuget搜索 usingXiaoFeng.IO;usingXiaoFeng; privatevoidbutton1_Click(objectsender,EventArgse){varsavedlg=newFolderBrowserDialog(){Description="选择保存的路径",......
  • WPF 依赖属性
    一、简介在WPF中,最常见属性就是依赖属性,支持数据绑定的属性都是依赖属性,像Button的Content就是一个依赖属性DependencyProperty。依赖属性没有值,可以依赖绑定源来获取值换句话说,只有依赖属性支持数据绑定,当我们需要一些特殊的属性而该控件没有时,就可以为其添加一个依赖......
  • 用Wpf做一个画笔画板(续5-Diagram画板)
    先上效果图吧同样老规矩,先上源码地址:https://gitee.com/akwkevin/aistudio.-wpf.-diagram本次实现的内容有[1]画笔实现[2]封闭画笔实现[3]钢笔实现[4]文字画笔[5]直线,矩形,椭圆[6]Path形状[7]取色器[8]三种画笔可选画笔示例入口  示例截图 核心代......
  • WPF.Basic.数据绑定
    WPF常用五种数据绑定方式 绑定方式一(绑定元素依赖属性)<StackPanel><SliderName="s1"Value="10"Maximum="100"></Slider><TextBlockFontSize="{BindingElementName=s1,Path=Value}"Text="看着我">......
  • WPF.Basic.依赖属性
    1依赖属性定义  在WPF界面的数据绑定中,为了能够使绑定源数据和绑定目标在变更后能够通知对方,.net在原来的属性之上设计了依赖属性    所以支持绑定的属性本质上它都是封装后的依赖属性。那么也就是说,只有依赖属性才可以进行绑定。  1依赖属性使用publiccl......
  • css解决浏览器滚动条出现时页面宽度会缩窄页面抖动
    css解决浏览器滚动条出现时页面宽度会缩窄页面抖动解决方式如下方式一html{overflow-y:scroll;}总是显示滚动条,体验不好方式二html{overflow-y:overlay;}兼容性一般方式三html{margin-right:calc(100%-100vw);}方式四html{padding-......
  • overflow 出现滚动条 内容无法铺满
      如图:背景色是没有完全铺满的,现在使用的属性是:overflow:scroll改为overflow-y:overlay;即可......
  • wpf XAML 设计器异常,提示NullReferenceException 未将对象引用设置到对象
     在cs构造函数里手动注册,并且在控件的构造函数里增加判断if(DesignerProperties.GetIsInDesignMode(this)){return;}//在这里才注册Load事件cmbSpeed.Loaded+=cmbSpeed_Loaded;来源:https://www.cnblogs.com/zsx-blog/p/8311633.html ......