如何在WPF中为用户控件允许多个项目/内容?

时间:2009-03-05 17:49:49

标签: wpf user-controls

我设法将内容重定向到我的stackpanel,如下所示:

<UserControl 
x:Name="taskItem">
<UserControl.ContentTemplate>
    <DataTemplate>
        <StackPanel>
            <Label x:Name="labelHeader" Content="{Binding ElementName=taskItem,Path=Header}" FontFamily="Tahoma" FontSize="16" FontWeight="Bold" />
            <Border BorderThickness="0,1,0,0" BorderBrush="#999999" Margin="5,0,5,0">
                <StackPanel Margin="10,5,0,0">
                    <ContentPresenter Content="{TemplateBinding Content}" />
                </StackPanel>
            </Border>
        </StackPanel>
    </DataTemplate>
</UserControl.ContentTemplate>

我正在尝试创建一个控件,它有一个标题,在它下面有一行,然后是N个子内容。但是,在它当前的实现中,它不会允许多个。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

根据定义,用户控件有一个子节点,因为它继承自ContentControl。使用户控件具有所有标头,然后使ItemsControl成为UserControl的内容。将DataTemplate应用于ItemsControl的ItemTemplate属性。

    <UserControl x:Class="WindowsApplication1.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
      </Grid.RowDefinitions>
      <Grid Name="MainHeadersGrid" Grid.Row="0">
        <TextBlock Text="Put your headers here" />
      </Grid>

      <ItemsControl Name="childItemsWillGoInHere"  ItemsSource="{Binding}" Grid.Row="1">
        <ItemsControl.ItemTemplate>
          <DataTemplate>
            <TextBlock Text="{Binding PropertyOfItem}" />
          </DataTemplate>
        </ItemsControl.ItemTemplate>
      </ItemsControl>

    </Grid>
</UserControl>

现在,将UserControl的模板的DataContext分配给要显示的对象的集合。