this question 다음에 나는 TreeView
에 대한 다른 질문이 있습니다.'ItemTemplate'및 'ItemTemplateSelector'둘 다 설정됩니다. 'ItemTemplateSelector'이 무시됩니다
내가 가지고있는 것은 TreeView
과 HierarchicalDataTemplate
이며 레벨 2의 HierarchicalDataTemplate
을 변경할 수 있습니다 (질문과 답변에서 설명하는 것과 같습니다).
내가 지금 원하는 것은 Treeview
의 확장기 모양을 변경하는 것입니다. 이를 위해, 나는 ControlTemplate
ctForTreeViewItem
이름을 정의하고, 나는이처럼 사용
<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>
, 나는 정의 ControlTemplate
및 올바른 HierarchicalDataTemplate
와 TreeViewItems
있습니다.
그러나 Level2에는 작동하지 않습니다. 여기서 나는 ItemTemplateSelector
입니다. System.Windows.Data Error: 25 : Both 'ItemTemplate' and 'ItemTemplateSelector' are set; 'ItemTemplateSelector' will be ignored.
있는 방법은
ItemTemplateSelector
을 유지하면서 내가는TreeViewItem
들에ControlTemplate
를 할당 할 수 있나요 :이 위치에서, 나는이 오류가? 또는 심지어다른 방법이 있습니까, 나는
TreeView
의 확장기의 스타일을 변경할 수 있습니까?
당신이 TreeViewItem에 ItemTemplateSelector 설정을 시도 유무 :
템플릿/템플릿 선택 오류
는 무해하지만 레벨 2 계층 적 데이터 템플릿을 null로 명시 적으로ItemTemplateSelector
을 설정하여 침묵 할 수 있었다 스타일을 HierarchicalDataTemplate에 추가 하시겠습니까? –그리고 그것은 무엇을 의미합니까? 내가 (위에서 설명한 것처럼) 동시에 사용할 수 없다는 뜻인가요? – Yvonnila
@EdPlunkett 네, level1에서'ItemTemplateSelector'도 옮겼습니다. 'TreeView'의'ItemContainerStyle'에 대해'Template'을 정의하자마자 동일한 오류가있었습니다. – Yvonnila