DataTemplates集合

时间:2012-10-06 18:02:15

标签: c# wpf xaml custom-controls

我在这里有一个名为DockGroup的自定义控件类。我想将DockGroup和databind的样式模板应用于Items依赖项属性(使用自定义datatemplate)。

[ContentProperty(@"Items")]
public class DockGroup : Control
{
    public static readonly DependencyProperty ItemsProperty =
        DependencyProperty.Register("Items", typeof(ObservableCollection<UIElement>), typeof(DockGroup), new PropertyMetadata(default(ObservableCollection<UIElement>)));

    public ObservableCollection<UIElement> Items
    {
        get { return (ObservableCollection<UIElement>)GetValue(ItemsProperty); }
        set { SetValue(ItemsProperty, value); }
    }

    public DockGroup()
    {
        Items = new ObservableCollection<UIElement>();
        DataContext = Items;
    }
}

这是DockGroup的样式,也包含DataTemplate。

<Style TargetType="{x:Type local:DockGroup}">
    <Style.Resources>
        <DataTemplate x:Key="Items" DataType="{x:Type UIElement}">
            <Label>I DON'T KNOW WHAT TO PUT IN DATATEMPLATE</Label>
        </DataTemplate>
    </Style.Resources>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:DockGroup}">
                <ContentPresenter ContentSource="{Binding}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

以下是我想测试的XAML示例。

<local:DockGroup>
     <Label Background="#FFF0F077">Hello World!</Label>
     <Label Background="#FFF0F077">Hello World 2!</Label>
</local:DockGroup>

当我运行项目时,我得到一个空白窗口。而且,我似乎无法弄清楚出了什么问题。

1 个答案:

答案 0 :(得分:0)

您可以使用ItemsControl设置控件的样式以使其工作:

<Style TargetType="{x:Type local:DockGroup}">
<Setter Property="Template">
  <Setter.Value>
    <ControlTemplate>
      <ItemsControl ItemsSource="{Binding Items, RelativeSource={RelativeSource TemplatedParent}}"/>
    </ControlTemplate>
  </Setter.Value>
</Setter>