我有下面的TreeView
和几个HierarchicalDataTemplates
。在每个层次结构数据模板中,我都有一块xaml代码来定义我的对象X的结构。
TreeView示例
<TreeView ItemsSource="{Binding Cars}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Car}"
ItemsSource="{Binding Children}">
<StackPanel>
<TextBlock Text="{Binding Path=Name}"
FontSize="15"
FontWeight="Medium"
Foreground="Brown"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView>
现在,我想将StackPanel移到UserControl资源中的一个资源e.x
我尝试定义一个DataTemplate
,并将其用作层次结构数据模板的ItemTemplate
,但这不起作用。
我的尝试:
<DataTemplate x:Key="ModuleTemplate"
DataType="{x:Type local:Module}">
<StackPanel>
<TextBlock Text="{Binding Path=Name}"
FontSize="15"
FontWeight="Medium"
Foreground="Brown"/>
</StackPanel>
</DataTemplate>
<!-- TreeView section-->
<HierarchicalDataTemplate DataType="{x:Type local:Car}"
ItemsSource="{Binding Children}"
ItemTemplate="{StaticResource ModuleTemplate}">
@mm8的想法很好,也会奏效,但在我的情况下,这会导致许多UserControls
。我更喜欢简单一点的。
有什么想法我该如何实现我的目标吗?
我仍然只想将HierarchicalDataTemplate中的代码移动到UserControl.Resources…
然后使用x:shared属性将StackPanel
定义为非共享资源:
<UserControl.Resources>
<StackPanel x:Key="sp" x:Shared="False">
<TextBlock Text="{Binding Path=Name}"
FontSize="15"
FontWeight="Medium"
Foreground="Brown"/>
</StackPanel>
<HierarchicalDataTemplate DataType="{x:Type local:Car}"
ItemsSource="{Binding Children}">
<ContentControl Content="{StaticResource sp}" />
</HierarchicalDataTemplate>
</UserControl.Resources>
现在我想将StackPanel移动到一个资源,例如UserControl资源内的资源。
试试这个:
<HierarchicalDataTemplate DataType="{x:Type local:Car}"
ItemsSource="{Binding Children}">
<local:UserControl1 />
</HierarchicalDataTemplate>
其中UserControl1
是其中包含StackPanel
的UserControl
:
<UserControl...>
<StackPanel>...</StackPanel>
</UserControl>