Как добавить заголовок к разделителю в WPF? - PullRequest
7 голосов
/ 04 июля 2011

Я хотел бы добавить заголовок к разделителю WPF (чтобы он выглядел как верхняя строка GroupBox).Цель этого состоит в том, чтобы разделить представление на различные разделы, и я не могу использовать GroupBox, потому что руководящие принципы в нашем бизнесе говорят, что мы должны использовать разделители для этого ... Кто-то знает, как это сделать?

РЕДАКТИРОВАТЬ:

Я знаю, что можно достичь этого решения с помощью других элементов управления (например, границы и текстовое поле), но я хочу знать, можно ли добавить свойство Header к объекту Separator.

Ответы [ 2 ]

12 голосов
/ 04 июля 2011

Вы можете написать свой собственный элемент управления

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 голосов
/ 04 июля 2011

Попробуйте что-то вроде этого:

  <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>
...