如何在WPF中居中对齐组合框所选项目

时间:2015-02-18 05:19:17

标签: c# wpf combobox

我希望组合框选中的项目中心对齐,而下拉内容要左对齐。

为实现这一目标,我制作了默认组合框的完整副本,并修改了Toggle按钮水平对齐的内容展示器到中心

有没有简单的方法来实现这一点,而不是编辑整个模板

4 个答案:

答案 0 :(得分:0)

您只需要一个与ComboBoxItem样式相关联的触发器。

    <Style TargetType="ComboBoxItem">
        <Style.Triggers>
            <Trigger Property="IsSelected"
                     Value="True">
                <Setter Property="HorizontalContentAlignment" Value="Center"/>
            </Trigger>
        </Style.Triggers>
    </Style>

答案 1 :(得分:0)

在ComboBox的ControlTemplate中的ContentPresenter中指定Horizo​​ntalAlignment =“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>

答案 2 :(得分:0)

一种对我有用的简单方法:

<Style TargetType="ComboBox">
    <Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>

答案 3 :(得分:0)

我想出了一种无需重新模板化 ComboBox 的方法:

<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>

<ComboBox HorizontalContentAlignment="Center"> 会将所有项目设置为默认居中 - 下拉列表中的项目和选择框中的项目。

DataTrigger 样式中的 ComboBoxItem 在可视化树中的某处查找 ComboBox 父级。由于下拉列表位于 Popup 内,它不是主视觉树的一部分,因此对于未选择的项目,此 DataTrigger 将始终失败。 selected 项目 显示在 ComboBox 内,作为主视觉树的一部分,因此该项目的 DataTrigger 成功,并且项目对齐 Left

Visibility 部分有点随意。我需要一些可以预测其值的属性,因此如果找到 DataTrigger 源,Combobox 将始终激活。在这种情况下,Visibility 不一定总是 Visible,但如果不是,则无论如何您都看不到对齐方式,因此无所谓。