1

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

0 回答 0