好的...這裏有兩個人。 (中排序。實際上可能只是一個,那就是我希望反正。)修改或「調整」現有的TreeViewItem控件模板?
首先,更普遍的,是有可能的目標,僅通過XAML,在控制的模板命名的項目?例如,如果控件的模板有一個名爲'PART_Foo'的ContentPresenter,並且我們想通過純樣式將該特定項目上的HorizontalAlignment設置爲'Stretch',是否可以完成?我知道我們可以在子類的OnApplyTemplate覆蓋中做到這一點,我們通過名稱顯式地搜索控件,然後在代碼中設置屬性,但是我們希望只使用僅限XAML的解決方案,因此我們可以通過樣式嚴格執行此操作而不是子類,除了特定的用例場景之外,它們大多不鼓勵使用。
另外,我們做不是想要手動指定控件的模板,因爲我們希望當前主題確定該模板是什麼,從而確定控件是如何顯示的。我們只想說'在主題選擇的任何模板中,如果有一個名爲'foo'的部分,通過純樣式設置該屬性。如果找不到那個名字的部分,什麼也不要做!
對僅使用XAML方法的期望更多的是因爲第二部分,我們將目標定位爲生成的容器對象,而不是控件本身,意味着它不會是直接的子類,因爲我們會必須用ItemcontainerGenerators等來解決這個問題,這對$$是一個真正的痛苦,特別是當ItemsControl被虛擬化時。
對於具體情況,我們的最終目標是在TreeView的TreeViewItem模板中選出名爲'Bd'的邊框,並將其附加屬性'Grid.ColumnSpan'設置爲'2'而不是默認值'1'。而已!它令我驚訝的是,如果沒有手動替換整個TreeViewItem的模板或使用基於代碼隱藏的解決方案,看起來如此簡單似乎幾乎不可能。
順便說一句,這是我們想避免不得不做的只是改變一個臭味的財產! http://msdn.microsoft.com/en-us/library/ms788727.aspx – MarqueIV 2010-09-30 04:26:57