[英]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.