WPF DataGrid类(不是Windows窗体DataGrid!)可以设置为在没有外部ScrollViewer的情况下自动处理滚动,并且可以为控件的内部滚动条注册事件处理程序通过编写像这样的XAML:
<DataGrid ScrollViewer.ScrollChanged="dGrid_ScrollChanged" />
如果我错了,请纠正我,但在这种情况下,内部ScrollViewer似乎是某种未记录的附加属性。 ScrollViewer不是DataGrid的公共字段,您将在DataGrid文档中找不到ScrollViewer或ScrollChanged事件的引用。换句话说,仅仅执行myDataGrid.ScrollViewer.ScrollChanged += dGrid_ScrollChanged
不起作用。
所以我的问题是,如何在运行时为此ScrollChanged事件添加或删除事件处理程序?我试图理解这里发生的事情,因为我正试图解决问题,所以解释越多越好。
答案 0 :(得分:6)
尝试在你的代码中使用UIElement的AddHandler和RemoveHandler -
dg.AddHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(dg_ScrollChanged));
dg.RemoveHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(dg_ScrollChanged));
由于ScrollViewer不是dataGrid的依赖属性,因此需要使用AddHandler进行挂钩。就像你不能像这样设置Grid.RowSpan dg.Grid.RowSpan = 2
你必须像dg.SetValue(Grid.RowSpanProperty, 2)
那样设置附加属性
您需要为附加属性挂钩的事件也是如此。
答案 1 :(得分:0)
您可以使用UIElement.RemoveHandler方法。
如果您的网格有一个名称:“grid”,那么您可以这样做:
grid.RemoveHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(dGrid_ScrollChanged));
ScrollViewer.ScrollChanged
不是DataGrid的属性,但是它可以在使用ScrollViewer