如何在WPF中为分隔符添加标题?

7
我想给一个WPF分隔符添加标题(使其看起来像GroupBox的顶部线)。这样做的目的是将视图分成不同的部分,但我不能使用GroupBox,因为我们业务中的指南要求我们必须使用分隔符... 有人知道如何实现吗?
编辑:
我知道可以通过使用其他控件(例如边框和文本框)来实现此解决方案,但我想知道是否可以向分隔符对象添加Header属性。
2个回答

13

你可以编写自己的自定义控件

public class HeaderedSeparator : Control
{
    public static DependencyProperty HeaderProperty =
        DependencyProperty.Register(
        "Header",
        typeof(string),
        typeof(HeaderedSeparator));

    public string Header
    {
        get { return (string)GetValue(HeaderProperty); }
        set { SetValue(HeaderProperty, value); }
    }
}

还有样式:

<Style TargetType="{x:Type local:HeaderedSeparator}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:HeaderedSeparator}">
                <Grid Height="{TemplateBinding Height}">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="15"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <Separator Grid.Column="0"/>
                    <TextBlock Grid.Column="1" 
                        VerticalAlignment="Center" Margin="5 0" 
                        Text="{TemplateBinding Header}"/>
                    <Separator Grid.Column="2" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

然后使用它:

<local:HeaderedSeparator Header="Header1"/>
<local:HeaderedSeparator Header="Header2"/>

2

可以尝试像这样:

  <Grid Height="20">
     <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
     </Grid.ColumnDefinitions>
     <Separator
        Width="20"
        VerticalAlignment="Center"/>
     <TextBlock
        Grid.Column="1"
        HorizontalAlignment="Center"
        Margin="4, 0"
        Text="My Header"/>
     <Separator
        Grid.Column="2"
        VerticalAlignment="Center"/>
  </Grid>

这样做是可以的,但我希望有些东西真正使用Separator对象,这样它看起来就像其他应用程序中的分隔符一样,而无需映射完全相同的颜色、宽度和所有内容。 - Carl
1
@Carl:你可以将此作为控件模板用于 HeaderedContentControl,以代替 Separator 对象。 - user7116
@sixlettervariables:是的,我知道我可以这样做,但如果可能的话,我想将标题添加到真正的分隔符中,这样我就不必更改所有边框的样式以完全看起来像分隔符。也许这是不可能的,在这种情况下,我将使用这个解决方案,但如果可能的话,我更喜欢那个。 - Carl
@Carl - 现在它们是分隔符 ;) - Anvaka
哈哈,我简直不敢相信我没想到这个(现在感觉有点傻:P)。无论如何,谢谢,这很有效! - Carl
抱歉我取消了你的答案,但是Navid的更符合我的要求。 - Carl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接