ItemsControl.ItemTemplate中的WPF ContentPresenter

时间:2014-04-02 23:24:26

标签: c# wpf

我有两个用户控件,WorkflowTileItemsControl和WorkflowTileControl。 WorkflowTileItemsControl在ItemsControl中托管WorkflowTileControl。但是,我希望使用WorkflowTileItemsControl向WorkflowTileControl公开依赖项属性。为了做到这一点,这里是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中的最后一项。下面是有效的代码,是我正在寻找的功能(减去所有依赖属性的硬编码)。

<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中做过这样的事情。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

经过几天的研究,我找到了解决方案。 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>