Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF-Can';t将Groupbox标题向右对齐_Wpf_Alignment_Dockpanel - Fatal编程技术网

WPF-Can';t将Groupbox标题向右对齐

WPF-Can';t将Groupbox标题向右对齐,wpf,alignment,dockpanel,Wpf,Alignment,Dockpanel,我是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="M

我是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>

abc

如果要将标题与
右侧对齐,则必须覆盖
分组框的
模板
。默认情况下,它位于默认模板的左侧

关键是

  • 在承载标题ContentPresenter的边框上,将
    Grid.ColumnSpan
    设置为
    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>
    
    
    
    您需要在控件的模板内重新设计ContentPresenter

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

    看看这个,看看这是不是你想要的。你在找这条线吗

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

    您必须编辑
    GroupBox
    ControlTemplate
    ,因为页眉是硬编码的,使用
    网格和列排列左对齐。
    
    HorizontalAlignment="Right"