C# 如何在WPF中居中对齐组合框选定项
我希望combobox所选项目单独居中对齐,而下拉内容左对齐 为了实现这一点,我制作了一个默认组合框的完整副本,并将切换按钮水平对齐的内容呈现器修改为中心C# 如何在WPF中居中对齐组合框选定项,c#,wpf,xaml,combobox,C#,Wpf,Xaml,Combobox,我希望combobox所选项目单独居中对齐,而下拉内容左对齐 为了实现这一点,我制作了一个默认组合框的完整副本,并将切换按钮水平对齐的内容呈现器修改为中心 除了编辑整个模板之外,还有什么简单的方法可以实现这一点吗?您只需要一个与ComboBoxItem样式相关联的触发器 <Style TargetType="ComboBoxItem"> <Style.Triggers> <Trigger Property="IsSel
除了编辑整个模板之外,还有什么简单的方法可以实现这一点吗?您只需要一个与ComboBoxItem样式相关联的触发器
<Style TargetType="ComboBoxItem">
<Style.Triggers>
<Trigger Property="IsSelected"
Value="True">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Trigger>
</Style.Triggers>
</Style>
在组合框的ContentPresenter in Control模板中指定HorizontalAlignment=“Center”
<ControlTemplate x:Key="ComboBoxControlTemplate1" TargetType="{x:Type ComboBox}">
<Grid x:Name="MainGrid" SnapsToDevicePixels="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/>
</Grid.ColumnDefinitions>
<Popup ...... />
<ToggleButton ...../>
<ContentPresenter ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" Content="{TemplateBinding SelectionBoxItem}" ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" HorizontalAlignment="Center" IsHitTestVisible="False" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Grid>
</ControlTemplate>
一个对我有效的简单方法:
<Style TargetType="ComboBox">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
我想出了一种不用重新设置组合框模板的方法:
<ComboBox HorizontalContentAlignment="Center">
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Style.Triggers>
<DataTrigger Binding="{Binding Visibility, RelativeSource={RelativeSource AncestorType=ComboBox}}" Value="Visible">
<Setter Property="HorizontalContentAlignment" Value="Left"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
将默认设置所有项目居中-下拉列表中的项目和选择框中的项目
ComboBoxItem
样式中的DataTrigger
在可视树中的某个位置查找父对象。由于下拉列表位于弹出窗口
内,该弹出窗口不属于主视觉树的一部分,因此对于未选择的项目,此数据触发器
将始终失败。所选项目作为主可视化树的一部分显示在组合框中,因此该项目的DataTrigger
成功,并且该项目左对齐Left
可见性部分有点随意。我需要一些可以预测其值的属性,因此如果找到组合框
源代码,DataTrigger
将始终激活。在这种情况下,Visibility
不一定总是可见的,但如果不可见,您就看不到对齐方式,因此也没关系。不,实际上它不起作用,内容仍然是左对齐的。您确定此样式应用于您的ComboBoxItem吗?是的,实际上,它将组合下拉列表中先前选定的项目居中对齐,但我只需要切换按钮中的选定项目居中对齐,下拉列表中的元素左对齐。简而言之,除了更改控件模板之外,没有简单的方法可以做到这一点@XAML Lover的答案用于更改下拉列表(弹出窗口)中所选项目的对齐方式,但不会影响切换按钮中显示的项目对齐方式。谢谢,我只使用了控件模板