WPF DataGridRow动画报错:CellsPanelHorizontalOffset赋值错误
解决WPF DataGrid新增行滑入动画的绑定错误
直接动画DataGridRow的Margin会干扰DataGrid内部的布局计算,导致CellsPanel在分配子控件(比如Button)宽度时出现负值,触发绑定错误。改用RenderTransform实现滑入动画即可避免这个问题——它只在渲染层做视觉偏移,不会影响布局测量逻辑。
修改后的动画代码
替换LoadingRow事件中的原有代码:
var sb = new Storyboard(); // 确保DataGridRow拥有TranslateTransform用于平移动画 var translateTransform = e.Row.RenderTransform as TranslateTransform; if (translateTransform == null) { translateTransform = new TranslateTransform(); e.Row.RenderTransform = translateTransform; } // 创建X轴平移动画,从左侧屏幕外滑入 var slideAnimation = new DoubleAnimation() { From = -dgData.ActualWidth, To = 0, Duration = new Duration(TimeSpan.FromSeconds(1)), }; Storyboard.SetTargetProperty(slideAnimation, new PropertyPath("RenderTransform.X")); sb.Children.Add(slideAnimation); sb.Begin(e.Row);
原理说明
- 原来的
Margin动画会改变Row的布局占位空间,DataGrid的CellsPanel在计算内部控件宽度时,会因为负Margin导致可用空间计算异常,进而出现负值宽度赋值错误。 RenderTransform属于视觉变换,不影响控件的布局测量和排列流程,动画过程中内部控件的布局逻辑不受干扰,自然不会触发布局相关的绑定错误,同时保留了相同的滑入视觉效果。
内容的提问来源于stack exchange,提问作者Inevitable
相关产品推荐
相关产品推荐

