C# 是否可以将一个DataTemplate放置在另一个具有不同模板结构的DataTemplate中?

C# 是否可以将一个DataTemplate放置在另一个具有不同模板结构的DataTemplate中?,c#,wpf,datatemplate,C#,Wpf,Datatemplate,我想要ListBox的DataTemplate,将ItemsSource作为边框集合。在每个边框内,我想显示另一个列表框,其中包含一组具有自己的ItemsSource的项目。 但是,当我试图实现这个结构时,我无法填充任何数据 我的XAML代码- <Grid x:Name="RightPanel" Grid.Column="2" Background="Beige"> <Border BorderBrush="Black" Margin="4" Bor

我想要ListBox的DataTemplate,将ItemsSource作为边框集合。在每个边框内,我想显示另一个列表框,其中包含一组具有自己的ItemsSource的项目。 但是,当我试图实现这个结构时,我无法填充任何数据

我的XAML代码-

 <Grid x:Name="RightPanel" Grid.Column="2" Background="Beige">
            <Border  BorderBrush="Black" Margin="4" BorderThickness="1.5">
                  <ScrollViewer  Margin="2"  Focusable="False">
                    <ListBox x:Name="MainRightListBox" ItemsSource="{Binding ListBoxCollection,Mode=TwoWay}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <ListBox x:Name="ChildListBox" ItemsSource="{Binding CurrentPage.ClonedVectorImages,Mode=TwoWay}" SelectedItem="{Binding ImageVectorSelected}"  BorderBrush="Transparent" Background="Transparent">
                                    <ListBox.ItemTemplate>
                                        <DataTemplate>
                                            <StackPanel x:Name="canvas" Background="Transparent" Orientation="Horizontal" Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}, Mode=FindAncestor}}">
                                                <StackPanel.ContextMenu>
                                                    <ContextMenu>
                                                        <MenuItem Header="Delete" CommandParameter="{Binding}"
                                                    Command="{Binding PlacementTarget.Tag.DataContext.DeleteCloneCommand, RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}, Mode=FindAncestor}}"/>
                                                    </ContextMenu>
                                                </StackPanel.ContextMenu>
                                                <Viewbox Width="35" Height="35" >
                                                    <Canvas Width="35" Height="35">
                                                        <Canvas>
                                                            <Path Fill="#ffda2526" Data="F1 M 0.000,112.500 C 0.000,50.369 50.368,0.000 112.500,0.000 C 174.632,0.000 225.000,50.369 225.000,112.500 C 225.000,174.633 174.632,225.000 112.500,225.000 C 50.368,225.000 0.000,174.633 0.000,112.500 Z" Height="30.667" Stretch="Fill" Width="31"/>
                                                            <TextBlock x:Name="tb1" Text="{Binding CountId}" Foreground="WhiteSmoke" FontSize="20" FontFamily="Arial Bold" Height="20" RenderTransformOrigin="1.588,1.224" Canvas.Left="9.322" Canvas.Top="3.335"></TextBlock>
                                                        </Canvas>
                                                    </Canvas>
                                                </Viewbox>

                                                <TextBox Text="Enter Text Here" Height="20" VerticalAlignment="Center"/>
                                            </StackPanel>
                                        </DataTemplate>
                                    </ListBox.ItemTemplate>
                                </ListBox>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>

                </ScrollViewer>
            </Border>
        </Grid>

“能否将一个DataTemplate放置在另一个具有不同模板结构的DataTemplate中?”

答案是可以的。您的XAML结构很好

但使用的绑定路径/表达式可能有什么错误。您需要注意,内部
列表框
DataContext
(在
DataTemplate
中的那一个)是
ListBoxCollection
中的对应项。因此,如果前面提到的项具有属性
CurrentPage.ClonedVectorImages
,那么这种绑定方式应该可以很好地填充内部
列表框

<ListBox x:Name="ChildListBox" 
         ItemsSource="{Binding CurrentPage.ClonedVectorImages,Mode=TwoWay}" 
         ........>

您需要使用相应的键将
数据模板
放入参考资料中,否则可能会发生异常:

Markup.IStyle.Connector.Connect错误

这是studio的bug,描述如下:

查看此问题的一个好方法“模板化就像括号,引用括号”模板XAML不是创建的,而是保存并在以后运行。因此,错误在于:嵌套括号有问题


在任何情况下,我认为,应该避免嵌套模板,并通过资源使用他,这将更容易和更清楚

我创建ListBoxCollection只是为了给外部ListBox提供一些ItemSource,因此ListBoxCollection只是动态创建的边框的集合。在这些单独的边框内,我想放置InnerListbox项。所以我的视图是这样的-边框1(listboxItem1,listBoxItem2,…)边框2(listBoxItem3,…)边框3(…)。。。。。我能从相同的XAML结构中获得这个视图吗?如果我正确理解了您的评论,我想您不能。您当前的XAML标记意味着,您将有一个列表框,其中每个边框填充ListBoxItems。如果您想让ListBoxItems直接位于边框内,并且这些ListBoxItems是跨边框连续的,那么这种方法是错误的。明白了。您能推荐其他方法或示例,让我了解如何创建我提到的相同视图吗?