Wpf ComboBox选择的项目对齐方式

时间:2015-03-24 15:13:58

标签: c# wpf xaml combobox styles

您好我在我的wpf应用程序中使用Reuxables Free Theme Inc

我以这种方式将主题添加到App.xaml中:

 <Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/ReuxablesLegacy;component/inc.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

在我的Main.xaml中,我默认使用了一个组合框,其内容与左边对齐:

enter image description here

我想将组合框的内容对齐。

当我尝试HorizontalContentAlignment="Right"时没有任何改变。

我尝试了TextBlock.TextAlignment="Right",结果就是这样:

enter image description here

此时组合框与右边对齐,但是在此图片中为“1”的所选项目仍然与左边对齐。

无论我尝试了什么,我无法将所选项目对齐到右侧。我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果你查看MSDN上的ComboBox Styles and Templates页面,你会发现WPF中使用的ControlTemplate的默认ComboBox。它太大而无法在此处显示,但如果您向下看页面,则会看到名为TextBox的{​​{1}}控件,如下所示:

PART_EditableTextBox

这是用于所选值的控件,如您所见,其 <TextBox x:Name="PART_EditableTextBox" Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="3,3,23,3" Focusable="True" Background="Transparent" Visibility="Hidden" IsReadOnly="{TemplateBinding IsReadOnly}" /> 属性已硬编码为HorizontalAlignment,因此此"Left"中的文字将始终与左侧对齐

因此,要将文字与右侧对齐,您需要为TextBox定义自己的ControlTemplate。您可以在MSDN上的Control Authoring Overview页面中找到如何执行此操作的方法。基本上,您只需要复制默认ComboBox并将上面的ControlTemplate替换为下面的TextBox

TextBox

完成此操作后,将新的 <TextBox x:Name="PART_EditableTextBox" Style="{x:Null}" Template="{StaticResource ComboBoxTextBox}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="Bottom" Margin="3,3,23,3" Focusable="True" Background="Transparent" Visibility="Hidden" IsReadOnly="{TemplateBinding IsReadOnly}" /> 应用到ControlTemplate的{​​{1}}属性,并将Template属性设置为ComboBox,然后应该最终看到你选择的值文本右对齐。