完全替换ItemsControl ContentPresenter并显示控件

时间:2012-12-14 22:47:07

标签: c# wpf silverlight xaml

我正在使用ItemsControl根据我的模型生成控件列表。 在查看可视化树时,我注意到每个呈现的控件都包含在ContentPresenter中。添加的控件是第三方控件,用于在每个控件之间显示分隔符(如果它们是兄弟姐妹)。这允许用户调整每个控件的大小。例如,以下内容将在运行时显示每个控件之间的拆分器。

<StackPanel>
<3rdPartyControl />
<3rdPartyControl />
<3rdPartyControl />
</StackPanel>

使用ItemsControl时,每个3rdPartyControl都包含在ContentPresenter中,因此不会显示分割器。我已经尝试了各种方法来尝试解决这个问题但是无法让它工作,除非我编写代码来添加每个控件而不是依赖Xaml。 有没有人知道一种完全替换contentpresenter的方法(在我的情况下使用3rdpartyControl)?

由于

2 个答案:

答案 0 :(得分:4)

为了替换ContentPresenter,您可以从ItemsControl派生并覆盖GetContainerForItemOverride方法以创建专门的容器控件。

ListBox例如重写此方法以创建ListBoxItem作为新项目对象的容器。

答案 1 :(得分:0)

确实如此,您添加到ItemsControl的每个元素都包含在ContentPresenter中,您可以在dr.wpf ItemsControl a-z

的greate系列文章中找到有关它的更多详细信息。

我建议尝试的一种方法是将ItemsControl更改为ListBox,并使ListBox像ItemsControl一样。在这种情况下,您可以重新设置/重新模板ListBoxItem并将ContentPresenter替换为您的控件。您还需要停止选择支持。 Here是您需要更改的ListBox样式。