我挣扎了一段时间没有运气。我的自定义控件基于 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>