WPF ContentPresenter inside an ItemsControl.ItemTemplate

本文关键字:ItemsControl ItemTemplate an inside ContentPresenter WPF | 更新日期: 2023-09-27 17:56:12

我有两个用户控件,WorkflowTileItemsControl和WorkflowTileControl。 WorkflowTileItemsControls 在 ItemsControl 中承载 WorkflowTileControl。 但是,WorkflowTileControl 上有一些依赖属性,我希望使用 WorkflowTileItemsControl 向任何内容公开这些属性。 为了做到这一点,这里是WorkflowTileItemsControl的ItemsControl代码。

<ItemsControl ItemsSource="{Binding Source={StaticResource WorkflowTilesViewSource}}">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <ContentPresenter Content="{Binding WorkflowTileControl, ElementName=ctrlWorkflowTileItems}" />
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

但是,这似乎不起作用。 它仅显示项控件中的最后一项。 下面是有效的代码,也是我正在寻找的功能(减去对所有依赖项属性进行硬编码)。

<ItemsControl ItemsSource="{Binding Source={StaticResource WorkflowTilesViewSource}}">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <OrderCommon:WorkflowTileControl IsReadOnly="True" Margin="5" TasksTitle="Defects" />
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

这就是我的调用代码的样子。

<OrderCommon:WorkflowTileItemsControl WorkflowRequirementTypeCode="DISBURSEMENTDFCT" Margin="5" MinWidth="1000" MaxWidth="1250" HorizontalAlignment="Left">
  <OrderCommon:WorkflowTileItemsControl.WorkflowTileControl>
    <OrderCommon:WorkflowTileControl IsReadOnly="True" Margin="5" TasksTitle="Defects" />
  </OrderCommon:WorkflowTileItemsControl.WorkflowTileControl>
</OrderCommon:WorkflowTileItemsControl>

我觉得我缺少一些简单的步骤。 我不确定ContentPresenter是否是这项工作的正确工具。 我以前没有在 WPF 中做过这样的事情。 有人可以帮忙吗?

WPF ContentPresenter inside an ItemsControl.ItemTemplate

所以经过几天的研究,我找到了解决方案。 WorkflowTileItemsControl 需要公开 DataTemplate 的依赖项属性,该属性将绑定到 ItemsControl 的 ItemsTemplate。 下面是 WorkflowTileItemsControl 的 xaml:

<ItemsControl ItemsSource="{Binding Source={StaticResource WorkflowTilesViewSource}}" ItemTemplate="{Binding WorkflowTileTemplate, ElementName=ctrlWorkflowTileItems}">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
</ItemsControl>

下面是调用控件的 xaml:

<OrderCommon:WorkflowTileItemsControl WorkflowRequirementTypeCode="DISBURSEMENTDFCT" Margin="5" Width="1130" HorizontalAlignment="Left">
  <OrderCommon:WorkflowTileItemsControl.WorkflowTileTemplate>
    <DataTemplate>
      <OrderCommon:WorkflowTileControl IsReadOnly="True" Margin="5" TasksTitle="Defects" />
    </DataTemplate>
  </OrderCommon:WorkflowTileItemsControl.WorkflowTileTemplate>
</OrderCommon:WorkflowTileItemsControl>