我目前正在WPF TreeView顯示。此樹視圖的內容是從普通數據綁定:做業主繪製WPF項目生成的數據綁定
<TreeView HorizontalAlignment="Stretch"
x:Name="LogMonitor"
VerticalAlignment="Stretch"
ItemsSource="{Binding LogEntries, UpdateSourceTrigger = PropertyChanged }">
<TreeView.Resources>
<HierarchicalDataTemplate
DataType="{x:Type Log:SystemLog}"
ItemsSource="{Binding Path=Lines}">
<TextBlock Text="{Binding Header}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
TreeView的是通過關鍵字過濾,但我也想有關鍵字高亮所有留在樹視圖中的樹型視圖。
舉例來說,如果沒有與頭一個TreeViewItem 「這是一個蘋果」和用戶輸入「蘋果」作爲過濾關鍵字,它應該顯示一個樹型視圖的樣子:
我嘗試了一些方法,但沒有太多的運氣。
使用內置的樣式:
高亮顯示需要字符串匹配以及將所述顏色塊匹配的子字符串下方。似乎沒有內置的樣式模板可以用這種方式來裝飾。繪製到畫布視圖模型對象,並綁定畫布的樹型視圖:
它的工作原理,只有當沒有選擇樹型視圖,一旦選擇,內置的繪圖調用不能找到一種方法來繪製在畫布「突出」風格,只留下一片空白區域。創建樹型視圖的子類,覆蓋的OnRender功能,那麼替代的TreeView的ItemContainerGenerator返回樹型視圖的我的子類:
不可能,TreeView控件的ItemContainerGenerator不可設置和非虛。我只能想到一個多選項:
放棄數據綁定,通過自己與overrided的OnRender功能推樹型視圖的子類爲TreeView控件的項目列表中。
它給了我在實驗中的積極結果。但是我對放棄數據綁定範例感到不舒服。所以我想問一下,有沒有其他方式來做數據綁定呈現所有者繪製。
謝謝。
將'UpdateSourceTrigger = PropertyChanged'變成單向綁定是沒有意義的S: –
我會使用Snoop來檢查可視圖層,看看是否有一個Adorner圖層可用於將紅色矩形添加到該圖層中在樹視圖上方,但在節點的文本下方。我不知道TreeView的裝飾層是否是解決方案 – Alan
我發現Snoop是一個了不起的工具。謝謝。雖然我還沒有找到一個體面的方式去做我想做的事。 在方向我試着重寫TreeView的GetContainerForItemOverride並返回我想要的子類。然後在TreeViewItem子類中執行OnRender覆蓋。它以某種方式工作,bur有一些我幾乎無法擺脫的故障。 –