WPF - 组框标题对齐
Posted
技术标签:
【中文标题】WPF - 组框标题对齐【英文标题】:WPF - Groupbox header alignment 【发布时间】:2014-05-23 18:44:40 【问题描述】:在 WPF 应用程序中,我想为我的 groupbox 实现类似的功能:
目标是为标题创建一个模板,只是为了在左侧显示一些内容(复选框 + 文本),在右侧显示一些内容(按钮)。
不幸的是,我唯一得到的是:
what I get http://imageshack.com/a/img513/706/fiaq.png
我不想以编程方式执行此操作,而是 XAML 中的所有内容(尽可能简洁)。我的意思是,使用网格、列定义等...不处理在调整窗口大小时会崩溃的边距。
我正在使用的 XAML(三列网格):
<GroupBox Margin="5">
<GroupBox.Header>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="15"></ColumnDefinition>
<ColumnDefinition Width="100*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0"></CheckBox>
<TextBlock Grid.Column="1" Margin="5,0,5,0" Text="This is my groupbox"></TextBlock>
<Button Content="Click" FontSize="8" Background="Yellow" Grid.Column="2" Height="16" Width="54"></Button>
</Grid>
</GroupBox.Header>
</GroupBox>
你怎么看?
【问题讨论】:
看来您需要编辑GroupBox的默认模板。相关问题:WPF Groupbox header postion alignment 【参考方案1】:默认情况下,GroupBox 标头的标头左对齐。但是在您的情况下,您希望很少有部分左对齐,并且很少需要正确覆盖 groupBox 标头的ControlTemplate
,例如定义的here 和here。
但是,您可以强制 Grid to stretch horizontally
使按钮可以放在右侧。但正如您在快照中看到的那样,标题内容的边框线会被隐藏,因此您可能会得到如下内容:
实现这一点的相关代码将是:
XAML
<GroupBox Margin="5" x:Name="groupBox"
xmlns:local="clr-namespace:NamespaceOfConverter">
<GroupBox.Resources>
<local:SubtractionConverter x:Key="SubtractionConverter"/>
</GroupBox.Resources>
<GroupBox.Header>
<Grid Width="Binding ActualWidth, ElementName=groupBox,
Converter=StaticResource SubtractionConverter">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="15"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0"/>
<TextBlock Grid.Column="1" Margin="5,0,5,0"
Text="This is my groupbox"/>
<Button Content="Click" FontSize="8" Background="Yellow"
HorizontalAlignment="Right" Grid.Column="2"
Height="16" Width="54"/>
</Grid>
</GroupBox.Header>
</GroupBox>
转换器
public class SubtractionConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
return (double)value - 25.0;
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
return Binding.DoNothing;
【讨论】:
它就像一个魅力!顶部边界线有一些问题,但足以满足我的需求。非常感谢!以上是关于WPF - 组框标题对齐的主要内容,如果未能解决你的问题,请参考以下文章