【问题标题】:How to add a header to a separator in WPF?如何将标题添加到 WPF 中的分隔符?
【发布时间】:2011-09-28 06:26:41
【问题描述】:

我想向 WPF 分隔符添加标题(使其看起来像 GroupBox 的顶行)。这样做的目的是将视图分成不同的部分,我不能使用 GroupBox,因为我们的业务指南说我们必须为此使用分隔符......有人知道怎么做吗?

编辑:

我知道可以通过使用其他控件(即边框和文本框)来实现此解决方案,但我想知道是否可以将 Header 属性添加到 Separator 对象。

【问题讨论】:

    标签: c# wpf xaml header separator


    【解决方案1】:

    试试这样的:

      <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:您可以将其用作HeaderedContentControl 的控制模板,以代替Separator 对象。
    • @sixlettervariables:是的,我知道我可以这样做,但如果可能的话,我想在真正的分隔符中添加一个标题,这样我就不必更改边框的所有样式来查看就像一个分隔符。也许这是不可能的,在这种情况下我会使用这个解决方案,但如果可能的话,我更愿意。
    • @Carl - 它们现在是分隔符 ;)
    • 哈哈我不敢相信我没有想到这个(我现在感觉有点愚蠢:P)。无论如何,谢谢,效果很好!
    【解决方案2】:

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

    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"/>
    

    【讨论】:

    • 谢谢,这就是我要找的 :)
    猜你喜欢
    • 2012-10-05
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多