我在这里有一个名为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>
当我运行项目时,我得到一个空白窗口。而且,我似乎无法弄清楚出了什么问题。
答案 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>