WPF GroupBox标题对齐问题
如何将groupBox标题与中心对齐,而不是与默认的左侧位置对齐 我在许多帖子中读到,一个人可以使用模板,但我不知道这样的事情。所以,请让我知道如何才能在中心得到头球WPF GroupBox标题对齐问题,wpf,xaml,header,groupbox,Wpf,Xaml,Header,Groupbox,如何将groupBox标题与中心对齐,而不是与默认的左侧位置对齐 我在许多帖子中读到,一个人可以使用模板,但我不知道这样的事情。所以,请让我知道如何才能在中心得到头球 谢谢 是的,您必须修改模板 有关中心对齐的信息请参见Thomas Levesque的 有关右对齐的信息,请参见Mihir Gokani 上传了一个包含中心对齐和右对齐的示例项目,如下所示: 使用与Thomas相同的方法进行中心对齐 像这样可用 <GroupBox Header="Centered Header"
谢谢 是的,您必须修改模板 有关中心对齐的信息请参见Thomas Levesque的
有关右对齐的信息,请参见Mihir Gokani 上传了一个包含中心对齐和右对齐的示例项目,如下所示: 使用与Thomas相同的方法进行中心对齐 像这样可用
<GroupBox Header="Centered Header"
Style="{StaticResource CenteredHeaderGroupBoxStyle}"
.../>
你的解决方案对我来说完美无瑕……非常感谢,但我注意到一些差异,这些差异并不困扰我,但我认为我应该与你分享。在普通GropuBox中,当我们插入网格时,网格位于带有一些默认边距的groupbox中。而在本例中(ur groupBox),网格的起始位置与标题完全相同。您可以尝试在示例的每个groupbox中插入一个网格,这样您就会明白我在说什么。我认为这和填充或边距有关。将在您的代码中查看。。。。再次非常感谢@你说得对,这真的很奇怪。它仅在Visual Studio 2010 Designer中发生,而不在Expression Blend 4中发生,并且在使用Blend创建的默认模板时发生。我会调查的。观察得好@Pankaj Upadhyay:我在模板中没有看到任何错误,所以可能是VS2010 Designer中的错误,或者可能是我缺少了一些东西。我不使用表达式混合,所以不能说太多:-P,但认为它值得废弃。。。只需按原样使用您的解决方案。。。。。Thanks@Pankaj乌帕迪亚:是的,确实是:)如果我发现更多关于这个主题的信息,我会在这里更新
<local:CenterBorderGapMaskConverter x:Key="CenterBorderGapMaskConverter"/>
<Style x:Key="CenteredHeaderGroupBoxStyle" TargetType="{x:Type GroupBox}">
<Setter Property="BorderBrush" Value="#D5DFE5"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate 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 BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.ColumnSpan="4" Grid.Column="0" CornerRadius="4" Grid.Row="1" Grid.RowSpan="3"/>
<Border Grid.ZIndex="2" x:Name="Header" Grid.Column="2" HorizontalAlignment="Center" Padding="3,1,3,0" Grid.Row="0" Grid.RowSpan="2">
<ContentPresenter ContentSource="Header" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
<ContentPresenter Grid.ColumnSpan="2" Grid.Column="1" Margin="{TemplateBinding Padding}" Grid.Row="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
<Border RenderTransformOrigin="0.5,0.5" BorderBrush="White" BorderThickness="{TemplateBinding BorderThickness}" Grid.ColumnSpan="4" CornerRadius="4" Grid.Row="1" Grid.RowSpan="3">
<Border.OpacityMask>
<MultiBinding ConverterParameter="7" Converter="{StaticResource CenterBorderGapMaskConverter}">
<Binding ElementName="Header" Path="ActualWidth"/>
<Binding Path="ActualWidth" RelativeSource="{RelativeSource Self}"/>
<Binding Path="ActualHeight" RelativeSource="{RelativeSource Self}"/>
</MultiBinding>
</Border.OpacityMask>
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="3">
<Border BorderBrush="White" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"/>
</Border>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
class CenterBorderGapMaskConverter : IMultiValueConverter
{
// Methods
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
Type type = typeof(double);
if (values == null
|| values.Length != 3
|| values[0] == null
|| values[1] == null
|| values[2] == null
|| !type.IsAssignableFrom(values[0].GetType())
|| !type.IsAssignableFrom(values[1].GetType())
|| !type.IsAssignableFrom(values[2].GetType()))
{
return DependencyProperty.UnsetValue;
}
double pixels = (double)values[0];
double width = (double)values[1];
double height = (double)values[2];
if ((width == 0.0) || (height == 0.0))
{
return null;
}
Grid visual = new Grid();
visual.Width = width;
visual.Height = height;
ColumnDefinition colDefinition1 = new ColumnDefinition();
ColumnDefinition colDefinition2 = new ColumnDefinition();
ColumnDefinition colDefinition3 = new ColumnDefinition();
colDefinition1.Width = new GridLength(1.0, GridUnitType.Star);
colDefinition2.Width = new GridLength(pixels);
colDefinition3.Width = new GridLength(1.0, GridUnitType.Star);
visual.ColumnDefinitions.Add(colDefinition1);
visual.ColumnDefinitions.Add(colDefinition2);
visual.ColumnDefinitions.Add(colDefinition3);
RowDefinition rowDefinition1 = new RowDefinition();
RowDefinition rowDefinition2 = new RowDefinition();
rowDefinition1.Height = new GridLength(height / 2.0);
rowDefinition2.Height = new GridLength(1.0, GridUnitType.Star);
visual.RowDefinitions.Add(rowDefinition1);
visual.RowDefinitions.Add(rowDefinition2);
Rectangle rectangle1 = new Rectangle();
Rectangle rectangle2 = new Rectangle();
Rectangle rectangle3 = new Rectangle();
rectangle1.Fill = Brushes.Black;
rectangle2.Fill = Brushes.Black;
rectangle3.Fill = Brushes.Black;
Grid.SetRowSpan(rectangle1, 2);
Grid.SetRow(rectangle1, 0);
Grid.SetColumn(rectangle1, 0);
Grid.SetRow(rectangle2, 1);
Grid.SetColumn(rectangle2, 1);
Grid.SetRowSpan(rectangle3, 2);
Grid.SetRow(rectangle3, 0);
Grid.SetColumn(rectangle3, 2);
visual.Children.Add(rectangle1);
visual.Children.Add(rectangle2);
visual.Children.Add(rectangle3);
return new VisualBrush(visual);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return new object[] { Binding.DoNothing };
}
}