自定义控件不允许将其子项集中在设计视图中

时间:2016-03-21 12:35:36

标签: wpf custom-controls contentcontrol xaml-designer

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

0 个答案:

没有答案