我有一个自定义控件,它基本上是一种 TreeView。现在问题是我需要在我的 TreeView 控件中有任何级别的细节,所以我想出了以下数据模板
我有以下 Generic.xaml
<DataTemplate x:Key="treetemplate">
<StackPanel>
<TextBlock Text="{Binding Label}" ></TextBlock>
<ItemsControl ItemsSource="{Binding Children}" ItemTemplate="{DynamicResource treetemplate}" />
</StackPanel>
</DataTemplate>
<ControlTemplate TargetType="{x:Type local:CustomControl1}" x:Key="testkey">
<ControlTemplate.Resources>
<local:AnythingToListConverter x:Key="anyconv"></local:AnythingToListConverter>
</ControlTemplate.Resources>
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ItemsControl ItemsSource="{Binding Root, Converter={StaticResource anyconv}}" ItemTemplate="{StaticResource treetemplate}" />
</Border>
</ControlTemplate>
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template" Value="{StaticResource testkey}" />
</Style>
这是我的自定义控件构造函数
this.Root = new Node();
this.Root.Label = "Root";
this.Root.Children = new List<Node>();
this.Root.Children.Add(new Node(){Label="Child1"});
this.DataContext = this;
这就是控制的样子
这是我认为的问题
对于同一模板的递归调用,我正在使用DynamicResource
. 这从未对我有用,实际资源从未被调用过。如果我将其更改为StaticResource
,它将无法编译,因为它不会看到自己。我如何解决它 ?
完整的解决方案可以在这里下载。