如何将层次结构DataTemplate中的xaml代码移动到资源中



我有下面的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是其中包含StackPanelUserControl

<UserControl...>
<StackPanel>...</StackPanel>
</UserControl>

相关内容

  • 没有找到相关文章

最新更新