ComboBox - 对齐所选项目并填充所选项目的文本,并为组合框项目创建鼠标滚动

时间:2014-02-08 17:41:14

标签: c# wpf combobox

我目前正在为我们网站将要使用的程序设计一个小应用程序,并在遇到有关组合框的问题后遇到问题。我终于把它带到了它需要的基本阶段,但是我面临着设置文本样式的问题,以便它集中对齐并用当前所选项目填充5个像素。我已经尝试将Setters添加到我认为正确的位置,我尝试将VerticalContentAlignment="Center"添加到主XAML文件中,但没有任何改变它。

enter image description here

我还想做的是当选项被翻转时,它们具有不同的背景颜色。我试过将一个MouseOver视觉状态添加到ComboBoxItem但无济于事。为冗长的代码(可能是凌乱的代码)提前道歉。这是一项在线工作的学习,其中大部分来自MSDN,然后根据需要进行编辑。非常感谢。

代码:http://pastebin.com/gQpp2W3U

1 个答案:

答案 0 :(得分:1)

这是因为参数HorizontalContentAlignmentVerticalContentAlignment未正确转移到ContentPresenter中的ControlTemplate:

<ContentPresenter x:Name="ContentSite"
                  ...
                  VerticalAlignment="Stretch"
                  HorizontalAlignment="Left">
</ContentPresenter> 

在这种情况下,参数是“缝制”的,应如下:

<ContentPresenter x:Name="ContentSite"
                  ...
                  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
</ContentPresenter> 

对于必要的动态背景元素,在<ControlTemplate.Triggers>部分添加触发器,之前为ComboBox的公共网格添加名称:

<ControlTemplate.Triggers>
    ...
    <Trigger Property="SelectedValue" Value="BATTLEFIELD4">
        <Setter TargetName="MainGrid" Property="Background" Value="Green" />
    </Trigger>

    <Trigger Property="SelectedValue" Value="CALLOFDUTY4">
        <Setter TargetName="MainGrid" Property="Background" Value="Blue" />
    </Trigger>

    <Trigger Property="SelectedValue" Value="CS">
        <Setter TargetName="MainGrid" Property="Background" Value="Red" />
    </Trigger>
</ControlTemplate.Triggers>

使用示例:

<Window ...
        xmlns:sys="clr-namespace:System;assembly=mscorlib">

<Window.Resources>
    <x:Array x:Key="TestArray" Type="{x:Type sys:String}">
        <sys:String>BATTLEFIELD4</sys:String>
        <sys:String>CALLOFDUTY4</sys:String>
        <sys:String>CS</sys:String>
    </x:Array>
</Window.Resources>

<Grid>
    <ComboBox SelectedIndex="0"
              Foreground="White"
              Background="Blue"
              Height="60"
              HorizontalContentAlignment="Center"
              VerticalContentAlignment="Center" 
              ItemsSource="{StaticResource TestArray}" />           
</Grid>

此外,琐事还添加了一些细节,可以下载项目的完整版here

<强> Output

enter image description here

enter image description here

enter image description here