我目前正在为我们网站将要使用的程序设计一个小应用程序,并在遇到有关组合框的问题后遇到问题。我终于把它带到了它需要的基本阶段,但是我面临着设置文本样式的问题,以便它集中对齐并用当前所选项目填充5个像素。我已经尝试将Setters添加到我认为正确的位置,我尝试将VerticalContentAlignment="Center"
添加到主XAML文件中,但没有任何改变它。
我还想做的是当选项被翻转时,它们具有不同的背景颜色。我试过将一个MouseOver视觉状态添加到ComboBoxItem但无济于事。为冗长的代码(可能是凌乱的代码)提前道歉。这是一项在线工作的学习,其中大部分来自MSDN,然后根据需要进行编辑。非常感谢。
答案 0 :(得分:1)
这是因为参数HorizontalContentAlignment
和VerticalContentAlignment
未正确转移到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
强>