2

我正在使用 ItemsControl 根据我的模型生成控件列表。在查看可视化树时,我注意到每个呈现的控件都包含在 ContentPresenter 中。添加的控件是第 3 方控件,如果它们是同级控件,则设计为在每个控件之间显示拆分器。这允许用户调整每个控件的大小。例如,以下将显示运行时每个控件之间的拆分器。

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

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

谢谢

4

2 回答 2

5

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

例如,ListBox 会覆盖此方法以创建一个 ListBoxItem 作为新项目对象的容器。

于 2012-12-14T22:55:15.370 回答
0

没错,您添加到 ItemsControl 的每个元素都使用 ContentPresenter 包装,您可以在 dr.wpf ItemsControl az的系列文章中找到有关它的更多详细信息

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

于 2012-12-14T22:58:26.413 回答