簡體   English   中英

附加活動?如何在運行時刪除WPF DataGrid的ScrollChanged事件處理程序

[英]Attached Event? How to remove ScrollChanged event handler for WPF DataGrid at runtime

可以將WPF DataGrid類(不是Windows窗體DataGrid!)設置為在沒有外部ScrollViewer的情況下自動處理滾動,並且可以通過編寫XAML來為控件的內部滾動條注冊事件處理程序:

<DataGrid ScrollViewer.ScrollChanged="dGrid_ScrollChanged"  />

如果我錯了,請糾正我,但在這種情況下,內部ScrollViewer似乎是某種未記錄的附加屬性。 ScrollViewer不是DataGrid的公共字段,您將在DataGrid文檔中找不到ScrollViewer或ScrollChanged事件的引用。 換句話說,簡單地執行myDataGrid.ScrollViewer.ScrollChanged += dGrid_ScrollChanged不起作用。

所以我的問題是,如何在運行時為此ScrollChanged事件添加或刪除事件處理程序? 我試圖理解這里發生了什么,就像我試圖解決問題一樣,所以解釋越多越好。

嘗試在你的代碼后面使用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)那樣設置Attach Properties。你需要為附加屬性掛鈎的事件也是如此。

您可以使用UIElement.RemoveHandler方法。

如果您的網格有一個名稱:“grid”,那么您可以這樣做:

grid.RemoveHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(dGrid_ScrollChanged));

ScrollViewer.ScrollChanged不是DataGrid的屬性,但它是可以在使用ScrollViewer的 FrameworkElements上使用的附加屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM