2012-01-09 63 views
1

嗯,我想我已經解決了這個問題。我只是改變了TreeViewItem的模板來忽略一個特定的節點是否被擴展。看起來很棒!但是,這只是它...它看起來太棒了!鍵盤導航仍會響應,就好像該節點已展開或摺疊一樣。如何創建始終展開的樹視圖?

舉例來說,如果我是根節點並擊中右箭頭(沒有移動,也不應該)然後打下來,我去根的第一個孩子。但是,如果我在根節點上並向左(再次,沒有任何動作)點擊,我跳到第二個根節點,跳過所有第一個節點的子節點!

不用說,這不是我們想要的行爲。我們可以簡單地吞下左右箭頭鍵,或者完全放棄樹視圖並移動到嵌套的項目演示者(這是TreeView的某種功能),但我希望不必重新創建整個控制只是爲了這個功能。思考?

回答

0

在你的樹型視圖模板,你可以設置IsExpanded爲true,如果他們有子元素的所有項目都應該再擴大。

不幸的是,你可能不得不吞下這些按鍵得到你想要的鍵盤導航,正如您所看到的導航是由設計。

您可以創建一個從TreeView控件繼承自定義樹視圖,並把這些按鈕事件在那裏,這樣就可以重新使用它。

+0

什麼按鈕事件? – MarqueIV 2012-01-11 19:00:18

+0

KeyDown專門用於當用戶按下某個鍵時可能發生的任何其他鍵事件。經過一番思考,聽起來你可能會更好地使用帶有itemtemplates項目的ListBox來區分它們。您正在尋找ListBox支持的導航,您不尋找摺疊組等。子對象可以有一個邊距或某些東西來複制您在正常樹視圖中看到的水平偏移量。 – CodeWarrior 2012-01-11 22:23:14

+0

嵌套列表框的問題是鍵盤導航更糟糕,因爲每個控件都是它自己的焦點範圍和標籤導航,並且這些都在列表框之間,而不是將它們作爲一個對待。當然,我可以模板屁滾尿流,但我只是猜測更好的事情會訂閱IsExpanded改變每個樹型視圖的通知物業並簡單地確保它保持真實。) – MarqueIV 2012-01-11 23:17:22