【发布时间】:2010-10-23 11:19:07
【问题描述】:
假设我有一组不同类的对象。每个类在资源文件中都有其 UserControl DataTemplated。
现在我想使用 ItemsControl 来显示集合,但我希望每个项目周围都有一个 Border 或 Expander。
我希望这样的事情能够奏效:
<ItemsControl ItemsSource="{Binding MyObjects}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="3">
<ContentPresenter/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
但是 ContentPresenter 似乎选择了 ItemTemplate,因为我遇到了堆栈溢出。
如何在 ItemTemplate 中获取每个 Item 的 DataTemplate?
【问题讨论】:
-
我认为您需要提供一些有关您遇到的错误的详细信息。您的输出窗口是否提供任何线索?
-
我有一个向 MyObjects 添加项目的按钮。单击它后,Output 中没有任何新内容。我从 WindowsBase.dll 得到一个 System.StackOverflowException。没有可用的来源,没有反汇编可以向我展示,也没有异常本身的详细信息。 (“无法评估表达式,因为当前线程处于堆栈溢出状态”)。 VS 中的调用堆栈没有给我任何东西。但是,如果我从 ItemTemplate 中删除 ContentPresenter,我只会得到每个项目的空边框,没有堆栈溢出。
标签: wpf datatemplate itemscontrol itemtemplate