3
我在更改用於TreeViewItem的DataTemplate時會出現一些問題。理想情況下,我希望每個項目都包含TextBlock
,然後在選擇時應包含TextBox
。當它被選中時更改TreeViewItem的模板
這裏是我到目前爲止(我用this question爲起點):
<Window>
<Window.Resources>
<HierarchicalDataTemplate x:Key="normal"
ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Text}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="selected"
ItemsSource="{Binding Path=Children}">
<TextBox Text="{Binding Path=Text}" />
</HierarchicalDataTemplate>
<Style TargetType="{x:Type TreeViewItem}" x:Key="ContainerStyle">
<Setter Property="ItemTemplate" Value="{StaticResource normal}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="ItemTemplate" Value="{StaticResource selected}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resource>
<Grid>
<TreeView ItemSource="{Binding Body}" ItemContainerStyle="{StaticResource ContainerStyle}" />
</Grid>
</Window>
會發生什麼事是,有樹只有一個節點,該節點的文本類型對象的名稱。這聽起來像綁定到節點的類型不是模板所期待的,所以它使用默認的ToString()
綁定,而不是我指定的Text
屬性。
我已經在代碼後面的文件中設置窗口的DataContext。我知道我的數據綁定是正確的,因爲如果我爲TreeView設置了一個HierarchicalDataTemplate
,則數據顯示正確。
我認爲我的問題是我需要在TreeViewItem
樣式中設置除ItemTemplate
之外的其他屬性 - 我是使用正確的屬性,還是應該設置其他屬性?
錯字在XAML:「HierarchialDataTemplate」應爲「HierarchicalDataTemplate 」。 – 2016-02-26 19:48:35
@MarkMiller固定 - 謝謝! – Andy 2016-02-26 20:31:25