麥克,
我已經通過包裝窗口控制,並捕捉包裝的Windows網格的選擇改變了事件解決了這個問題。
在您的控件中,連接控件的Loaded事件,並在加載時將boolean私有成員變量設置爲true。然後,當您捕捉內部數據網格的選擇更改事件時,如果您加載了控件,則只會引發您自己的選擇更改事件。完成後,現在可以返回到OnApplyTemplate子設置,並將內部數據網格的選定索引設置爲-1,並將所選項目設置爲無。由於索引和項目的設置將在控件加載完成之前發生,選擇更改事件不會觸發。我已經在標籤和非標籤的環境中嘗試了這一點,並且它看起來沒有問題。現在遇到一些棘手的問題,您可能會注意到,當您對窗口數據網格進行排序時(雖然它將數據綁定到一個ItemsSource),但它始終選擇顯示數據的頂層項目。當然,這將激發選擇更改的事件,並移動到之前未選中的項目,並且據我所知,不應該被選中。要處理這個問題,你必須做一些更棘手的編碼。如果你注意到,當你捕捉到內部網格的選擇改變的事件,並且查看它選擇的項目時,只有少數情況下選擇的項目沒有被設置爲任何東西,那些是當不再選擇項目時(即。選擇被清除),或者當(提示)列正在排序時。在排序時,有兩個事件觸發,第一個是取消選擇項目(SelectedItem爲Nothing),第二個是列表中頂部項目(SelectedIndex 0)的選擇。現在,如果要在內部網格選擇更改事件的事件處理程序中放置標誌,並且發現該項目沒有任何內容,則可以跟蹤之前選定的項目,然後設置內部數據網格的選定項目到先前選擇的項目。
這很好地解決了這個問題,並且在包裝Windows控件時總是會有不期望的結果,但據我所知,這似乎是解決在加載時選擇第一行的唯一方法問題。然而,我只能想象,這將在某個時刻由M $確定。
我希望這有助於
感謝,
斯科特