Ich habe die Standard GroupBox Vorlage bearbeitet, wie ich es anpassen wollte. Abgesehen von anderen Anpassungen wollte ich, dass der GroupBox-Header im Zentrum statt links oder rechts ausgerichtet wird. Die Ausrichtung des Headers ist kein Problem, das eigentliche Problem ist jedoch die OpacityMask, die für die Border-Steuerelemente definiert ist. Die Opazitätsmaske legt den transparenten Bereich hinter dem Gruppenkopf fest, in dem die Rahmen nicht gezeichnet werden. Ich bin nicht in der Lage, herauszufinden, wie ich den transparenten Platz/Abstand hinter dem Gruppenkopf platzieren kann, wenn ich den Header auf die Mitte setze.WPF GroupBox Header Anpassung
Hier ist, wie meine XAML wie folgt aussehen: (Bitte navigieren Sie zu dem Abschnitt mit „Border.OpacityMask“ ab, die die transparenten Lücke in dem Rahmen um die Kopfsätze)
<ControlTemplate x:Key="GroupBoxControlTemplate1" TargetType="{x:Type 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 Background="{TemplateBinding Background}" BorderBrush="Transparent"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="4" Grid.Column="1 " Grid.ColumnSpan="4"
Grid.Row="1" Grid.RowSpan="3" HorizontalAlignment="Stretch"/>
<Border x:Name="Header" Grid.Column="2" Grid.RowSpan="2" HorizontalAlignment="Left"
Padding="3,1,3,0" VerticalAlignment="Stretch">
<Border.Effect>
<DropShadowEffect BlurRadius="10" Direction="334"/>
</Border.Effect>
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
Content="{TemplateBinding Header}"
ContentSource="Header"
ContentStringFormat="{TemplateBinding HeaderStringFormat}"
ContentTemplate="{TemplateBinding HeaderTemplate}"
RecognizesAccessKey="True" Height="Auto"
VerticalAlignment="Center"
HorizontalAlignment="Center"
OpacityMask="#FF3844BD" Margin="0,1,0,0">
</ContentPresenter>
</Border>
<ContentPresenter Margin="{TemplateBinding Padding}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
Content="{TemplateBinding Content}"
ContentStringFormat="{TemplateBinding ContentStringFormat}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2"/>
<Border BorderBrush="White" BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="4" Grid.ColumnSpan="3" Grid.Row="1" Grid.RowSpan="3" RenderTransformOrigin="0.5,0.5" Margin="0">
<Border.OpacityMask>
<MultiBinding ConverterParameter="7" UpdateSourceTrigger="Default">
<MultiBinding.Converter>
<BorderGapMaskConverter/>
</MultiBinding.Converter>
<Binding Path="ActualWidth" ElementName="Header"/>
<Binding Path="ActualWidth" RelativeSource="{RelativeSource Self}"/>
<Binding Path="ActualHeight" RelativeSource="{RelativeSource Self}"/>
</MultiBinding>
</Border.OpacityMask>
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="4">
<Border BorderBrush="White" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="4"/>
</Border>
</Border>
</Grid>
Vielen Dank für Ihre Hilfe im Voraus.
-Wajahat
ich auf eine ähnliche Frage hier gekommen sind (http://stackoverflow.com/questions/2104013/wpf-groupbox- Header-Position-Alignment) wo die vorgeschlagene Antwort ist nicht was ich will. Die vorgeschlagene Lösung hier war so einfach Flip die Grenzen, so dass das Leerzeichen in der Grenze nach rechts bewegt wird. Ich möchte, dass der Header in der Mitte und nicht auf der rechten Seite steht. Vielen Dank. –