附加活动?如何在运行时删除WPF DataGrid的ScrollChanged事件处理程序

iva*_*tpr 3 c# wpf wpf-controls wpfdatagrid attached-properties

可以将WPF DataGrid类(不是Windows窗体DataGrid!)设置为在没有外部ScrollViewer的情况下自动处理滚动,并且可以通过编写XAML 来为控件的内部滚动条注册事件处理程序:

<DataGrid ScrollViewer.ScrollChanged="dGrid_ScrollChanged"  />
Run Code Online (Sandbox Code Playgroud)

如果我错了,请纠正我,但在这种情况下,内部ScrollViewer似乎是某种未记录的附加属性.ScrollViewer不是DataGrid的公共字段,您将在DataGrid文档中找不到ScrollViewer或ScrollChanged事件的引用.换句话说,干脆myDataGrid.ScrollViewer.ScrollChanged += dGrid_ScrollChanged就行不通.

所以我的问题是,如何在运行时为此ScrollChanged事件添加或删除事件处理程序?我试图理解这里发生的事情,因为我正试图解决问题,所以解释越多越好.

Roh*_*ats 6

尝试在你的代码后面使用UIElement的AddHandler和RemoveHandler -

dg.AddHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(dg_ScrollChanged));
dg.RemoveHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(dg_ScrollChanged));
Run Code Online (Sandbox Code Playgroud)

由于ScrollViewer不是dataGrid的依赖属性,因此需要使用AddHandler进行挂钩.就像你不能像这样设置Grid.RowSpan dg.Grid.RowSpan = 2 你必须设置类似的附加属性dg.SetValue(Grid.RowSpanProperty, 2) 与你需要挂钩附加属性的事件.