C# 如何在WPF中居中对齐组合框选定项

C# 如何在WPF中居中对齐组合框选定项,c#,wpf,xaml,combobox,C#,Wpf,Xaml,Combobox,我希望combobox所选项目单独居中对齐,而下拉内容左对齐 为了实现这一点,我制作了一个默认组合框的完整副本,并将切换按钮水平对齐的内容呈现器修改为中心 除了编辑整个模板之外,还有什么简单的方法可以实现这一点吗?您只需要一个与ComboBoxItem样式相关联的触发器 <Style TargetType="ComboBoxItem"> <Style.Triggers> <Trigger Property="IsSel

我希望combobox所选项目单独居中对齐,而下拉内容左对齐

为了实现这一点,我制作了一个默认组合框的完整副本,并将切换按钮水平对齐的内容呈现器修改为中心


除了编辑整个模板之外,还有什么简单的方法可以实现这一点吗?您只需要一个与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的答案用于更改下拉列表(弹出窗口)中所选项目的对齐方式,但不会影响切换按钮中显示的项目对齐方式。谢谢,我只使用了控件模板