【问题标题】:A ItemsControl without a ItemsPresenter (Silverlight)没有 ItemsPresenter 的 ItemsControl (Silverlight)
【发布时间】:2011-09-05 16:52:48
【问题描述】:

我创建了一个继承 ItemsControl 的控件,以及我制作的控件 其模板没有 ItemsPresenter。相反,我有一个网格。 我想列一个这样的清单:


(第 1 项)


(网格分割器)


(第 2 项)


(网格分割器)


(第 3 项)


因为我必须在 Items 之间插入我自己的 GridSplitter,所以我不能使用 ItemsPresenter 并让它为我填充 UI。

我重写了 OnItemsChanged() 方法,因此我可以编写添加/删除 网格分离器。但是,我仍然需要使用 ItemContainerGenerator 类来 为我的项目生成 ItemTemplate。

但是当我的控件模板中没有 ItemsPresenter 时,ItemContainerGenerator 似乎不起作用。当我第一次使用它生成项目时,它会返回 带有 DataTemplate 的 ContentPresenter。然后我将它插入到我拥有的网格中。 但是,屏幕上没有显示任何项目。如果我添加另一个项目,它会抛出 当我插入网格时出错,说该项目已经在可视化树中。 这就是我认为没有 ItemsPresenter 的 ItemContainerGenerator 无法工作的原因。

所以我尝试用 ItemsPresenter 替换我的 Grid。这一次,它使用了它的 下划线创建项目的逻辑,它显示了它应该做的事情。然而,这不是我想要的。

我想使用 ItemContainerGenerator 的原因是我需要创建 我在 Xaml 中定义的 ItemTemplate 中的 UI 元素。

有没有一种方法可以使用我对项目的控件的 ItemTemplate 生成 UI?

【问题讨论】:

    标签: templates silverlight contentpresenter itemspresenter


    【解决方案1】:

    如果您已经遇到了聆听 OnItemsChanged 并手动将内容添加到网格的麻烦,您应该只创建一个 UserControl 而不是使用 ItemTemplate,然后插入 UserControl 并将其 DataContext 设置为适用将对象放入您的网格中,而不必担心从 ItemsControl 继承。

    【讨论】:

    • 在我的控件上做了很多跟踪和错误之后,控件终于到了我期望的阶段。我仍然继承了 ItemsControl,因为我想拥有已经内置的 Item Template 功能。
    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多