设置选择的字体颜色与列表框控件中的未选中的字体颜色不同

问题描述:

我发现字体颜色来自列表框或组合框的内容(即,在控件模板外部)。当项目未被选中时,我想在白色背景上显示黑色文本,选中时会显示黑色背景和白色文本。 不幸的是我一直无法弄清楚如何改变文字颜色。我努力寻找在选定和未选择背景颜色之间形成鲜明对比的颜色。设置选择的字体颜色与列表框控件中的未选中的字体颜色不同

签入Silverlight 3,你似乎不能在那里做到这一点。

我设法在Silverlight 4中做一个类似的东西,用于弹出一个AutoCompleteBox下的列表框,但它有大量的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下进行,并且您将准备好将其绑定。

让我知道你是否管理或需要更多的解释!

+0

现在就开始新项目,但是当我有一些空闲时间时会检查它。干杯 – 2010-08-12 02:41:06