我没有运气就挣扎了一段时间。我的自定义控件基于ContentControl,类似于HeaderedContentControl,也是基于页脚。
如果在设计视图中单击原始HeaderedContentControl的标题中的元素,则在示例中:
<HeaderedContentControl>
<HeaderedContentControl.Header>
<Button Content="header"/>
</HeaderedContentControl.Header>
<Button>Content</Button>
</HeaderedContentControl>
点击“标题”按钮会将xaml代码置于<Button Content="header"/>
上。
我的控制:
public class TestControl : ContentControl
{
public static readonly DependencyProperty HeaderProperty = DependencyProperty.Register("Header", typeof (object), typeof (TestControl), (PropertyMetadata) new FrameworkPropertyMetadata((object) null));
[Bindable(true)]
[Category("Content")]
public object Header
{
get { return (object) GetValue(HeaderProperty); }
set { SetValue(HeaderProperty, value); }
}
}
和样式(取自HeaderedContentControl:
<Style>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type cbr:TestControl}">
<StackPanel>
<ContentPresenter Content="{TemplateBinding cbr:TestControl.Header}" ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}" ContentStringFormat="{TemplateBinding HeaderedContentControl.HeaderStringFormat}" ContentSource="Header" />
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如果在我的控件中单击了“标题”按钮(在设计视图中),则xaml会居中
<cbr:TestControl>
代替<Button Content="header"/>
<cbr:TestControl>
<cbr:TestControl.Header>
<Button Content="header"/>
</cbr:TestControl.Header>
<Button>Content</Button>
</cbr:TestControl>