我发现字体颜色来自列表框或组合框的内容(即控件模板之外)。当未选中项目时,我希望在白色背景上显示黑色文本,选择时则需要带有白色文本的黑色背景。 遗憾的是,我无法弄清楚如何更改文字颜色。我很难找到在选定和未选择的背景颜色之间形成鲜明对比的颜色。
在Silverlight 3中检查过,你似乎也无法在那里做到。
答案 0 :(得分:0)
我设法在Silverlight 4中为一个在AutoCompleteBox下弹出的ListBox做了类似的事情,但它有大量的Binging和XAML强奸。
基本上你必须创建一个ListBoxItem样式并在其下强制一些控件模板hackery。然后,您可以在ListBox上应用它,它应该可以工作。
我刚刚从我正在处理的项目中复制了相关代码,所以你必须稍微调整它,但它确实改变了鼠标上的字体和选择矩形颜色,所以应该是一个好的开始
<Style x:Key="MyListBoxItemStyle" TargetType="ListBoxItem">
<Setter Property="Foreground" Value="#FF4C4C4C" />
<Setter Property="FontStyle" Value="Normal" />
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid Background="{TemplateBinding Background}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.2" To="MouseOver">
<VisualTransition.GeneratedEasingFunction>
<CubicEase EasingMode="EaseOut"/>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
<VisualTransition From="MouseOver" GeneratedDuration="0:0:0.1">
<VisualTransition.GeneratedEasingFunction>
<CubicEase EasingMode="EaseOut"/>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="fillColor" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="0" Value="1"/>
</DoubleAnimationUsingKeyFrames>
<ColorAnimation Duration="0" To="#FFFFFFFF" Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="(Control.Foreground).(SolidColorBrush.Color)" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected"/>
<VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="fillColor2" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="0" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle x:Name="fillColor" IsHitTestVisible="False" Opacity="0" RadiusX="1" RadiusY="1" Fill="#FF1f6cae"/>
<Rectangle x:Name="fillColor2" IsHitTestVisible="False" Opacity="0" Fill="#FF000000" RadiusX="1" RadiusY="1"/>
<ContentControl HorizontalAlignment="Left" Margin="{TemplateBinding Padding}" x:Name="contentPresenter" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" Foreground="#FF4c4c4c"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="FontSize" Value="14"/>
</Style>
它应该直接在UserControl.Resources下运行,你就可以将它绑定了。
如果您管理或需要更多解释,请告诉我们!