我希望组合框选中的项目中心对齐,而下拉内容要左对齐。
为实现这一目标,我制作了默认组合框的完整副本,并修改了Toggle按钮水平对齐的内容展示器到中心
有没有简单的方法来实现这一点,而不是编辑整个模板
答案 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中指定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>
答案 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
,但如果不是,则无论如何您都看不到对齐方式,因此无所谓。