【问题标题】:WPF - Can't align Groupbox Header to rightWPF - 无法将组框标题向右对齐
【发布时间】:2014-04-01 09:49:47
【问题描述】:

我是 WPF 新手,

我无法将组框标题文本“abc”向右对齐,它停留在左侧,不知道为什么,谁能帮助我吗?

<Window x:Class="UserInterface.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="500" Width="625">
    <Grid ShowGridLines="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>             
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid Grid.Column="0" ShowGridLines="True">
            <Grid.RowDefinitions>
                <RowDefinition Height="4*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <StackPanel Grid.Row="1">
                <GroupBox>
                    <GroupBox.Header>
                        <DockPanel>
                            <TextBlock HorizontalAlignment="Right">abc</TextBlock>
                        </DockPanel>
                    </GroupBox.Header>
                </GroupBox>
            </StackPanel>
        </Grid>
    </Grid>
</Window>

【问题讨论】:

标签: wpf alignment dockpanel


【解决方案1】:

您必须覆盖Groupbox 中的Template,以防您想将标题与Right 对齐。默认情况下,它位于默认模板的左侧。

关键是

  1. 在边界托管 Header ContentPresenter 上将 Grid.ColumnSpan 设置为 2
  2. 在 ContentPresenter 上将 HorizontalAlignment 设置为 Right

下面是可以使用的 XAML:

<GroupBox Header="abc">
   <GroupBox.Template>
      <ControlTemplate TargetType="GroupBox">
         <Grid SnapsToDevicePixels="True">
            <Grid.ColumnDefinitions>
               <ColumnDefinition Width="6" />
               <ColumnDefinition Width="Auto" />
               <ColumnDefinition Width="*" />
               <ColumnDefinition Width="6" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
               <RowDefinition Height="Auto" />
               <RowDefinition Height="Auto" />
               <RowDefinition Height="*" />
               <RowDefinition Height="6" />
            </Grid.RowDefinitions>
            <Border BorderThickness="{TemplateBinding Border.BorderThickness}"
                    CornerRadius="4,4,4,4"
                    BorderBrush="#00FFFFFF"
                    Background="{TemplateBinding Panel.Background}"
                    Grid.Column="0"
                    Grid.Row="1"
                    Grid.ColumnSpan="4"
                    Grid.RowSpan="3" />
            <Border BorderThickness="{TemplateBinding Border.BorderThickness}"
                    CornerRadius="4,4,4,4"
                    BorderBrush="#FFFFFFFF"
                    OpacityMask="{x:Null}"
                    Grid.Row="1"
                    Grid.ColumnSpan="4"
                    Grid.RowSpan="3">
               <Border BorderThickness="{TemplateBinding Border.BorderThickness}"
                       CornerRadius="3,3,3,3"
                       BorderBrush="{TemplateBinding Border.BorderBrush}">
                 <Border BorderThickness="{TemplateBinding Border.BorderThickness}"
                         CornerRadius="2,2,2,2"
                         BorderBrush="#FFFFFFFF" />
               </Border>
             </Border>
            <Border Padding="3,1,3,0"
                    Name="Header"
                    Grid.Column="1"
                    Grid.ColumnSpan="2" <-- HERE
                    Grid.Row="0"
                    Grid.RowSpan="2">
               <ContentPresenter RecognizesAccessKey="True"
                                 HorizontalAlignment="Right" <-- And HERE
                                 Content="{TemplateBinding HeaderedContentControl.Header}"
                                 ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}"
                                 ContentStringFormat="{TemplateBinding HeaderedContentControl.HeaderStringFormat}"
                                 ContentSource="Header"
                                 SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
             </Border>
             <ContentPresenter Content="{TemplateBinding ContentControl.Content}"
                               ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}"
                               ContentStringFormat="{TemplateBinding ContentControl.ContentStringFormat}"
                               Margin="{TemplateBinding Control.Padding}"
                               SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}"
                               Grid.Column="1"
                               Grid.Row="2"
                               Grid.ColumnSpan="2" />
          </Grid>
       </ControlTemplate>
   </GroupBox.Template>
</GroupBox>

【讨论】:

    【解决方案2】:

    您需要重新设计Control模板内的ContentPresenter。

    MSDN 有一个示例,但不知何故它也重新设计了 GroupBox。

    检查一下,看看这是否是您要找的。你在找这条线

    <ContentPresenter Margin="4"
                      ContentSource="Header"
                      RecognizesAccessKey="True" />
    

    只需添加:

    HorizontalAlignment="Right"
    

    【讨论】:

      猜你喜欢
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      相关资源
      最近更新 更多