this questionに続いて、TreeView
について別の質問があります。'ItemTemplate'と 'ItemTemplateSelector'の両方が設定されています。 'ItemTemplateSelector'は無視されます
TreeView
はHierarchicalDataTemplate
で、レベル2のHierarchicalDataTemplate
を変更できます(質問と回答で説明したように)。
今私が望むのは、Treeview
のエクスパンダの外観を変更することです。このために、私はctForTreeViewItem
という名前ControlTemplate
を定義している、と私はこのようにそれを使用します。予想通り
<Window.Resources>
<ControlTemplate x:Key="ctForTreeViewItem"
TargetType="{x:Type TreeViewItem}">
<Expander IsExpanded="True"
Background="Grey"
BorderBrush="Transparent"
Foreground="White"
BorderThickness="1,1,1,3">
<Expander.Header>
<Border BorderThickness="{TemplateBinding Border.BorderThickness}"
Padding="{TemplateBinding Control.Padding}"
BorderBrush="{TemplateBinding Border.BorderBrush}"
Background="{TemplateBinding Panel.Background}"
Name="Bd"
SnapsToDevicePixels="True"
Grid.Column="1">
<ContentPresenter Content="{TemplateBinding HeaderedContentControl.Header}"
ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}"
ContentStringFormat="{TemplateBinding HeaderedItemsControl.HeaderStringFormat}"
ContentSource="Header"
Name="PART_Header"
HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
</Border>
</Expander.Header>
<Expander.Content>
<ItemsPresenter x:Name="ItemsHost" />
</Expander.Content>
</Expander>
</ControlTemplate>
<DataTemplate x:Key="Level3Template">
<Border Background="LightBlue">
<TextBlock Text="Level3"/>
</Border>
</DataTemplate>
<HierarchicalDataTemplate x:Key="Level2RedTemplate"
ItemsSource="{Binding Value}"
ItemTemplate="{StaticResource Level3Template}">
<Border Background="Red">
<TextBlock Text="Level2"/>
</Border>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="Level2YellowTemplate"
ItemsSource="{Binding Value}"
ItemTemplate="{StaticResource Level3Template}">
<Border Background="Yellow">
<TextBlock Text="Level2"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="Level1Template"
ItemsSource="{Binding Value}"
ItemTemplateSelector="{StaticResource MySelector}">
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="Template"
Value="{StaticResource ctForTreeViewItem}" />
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<Border Background="Green">
<TextBlock Text="Level1"/>
</Border>
</HierarchicalDataTemplate>
</Window.Resources>
<TreeView Grid.Row="1"
Name="tv"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource Level1Template}">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="Template"
Value="{StaticResource ctForTreeViewItem}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
これは、レベル1のために働くので、レベル1に、私が定義されControlTemplate
と正しいHierarchicalDataTemplate
でTreeViewItems
を持っています。
しかし、レベル2では、私はItemTemplateSelector
を持っています。この位置で、私はこのエラーを取得する:System.Windows.Data Error: 25 : Both 'ItemTemplate' and 'ItemTemplateSelector' are set; 'ItemTemplateSelector' will be ignored.
は
ItemTemplateSelector
を維持しながら、私は、TreeViewItem
秒にControlTemplate
を割り当てることができる任意の方法は、ありますか?またはさらに私は
TreeView
のエクスパンダのスタイルを変更することができます他の方法はありますか?
あなたはツリービューアイテムでItemTemplateSelectorを設定しようとしたことがありあなたのHierarchicalDataTemplateのスタイル? –
それはどういう意味ですか?それは私が(私が上で説明したように)同時にそれらを使用することができないことを意味しますか? – Yvonnila
@EdPlunkettはい、level1で 'ItemTemplateSelector'も移動しました。 'TreeView'の' ItemContainerStyle'の 'Template'を定義すると、私は同じエラーが発生しました。 – Yvonnila