0

我发现字体颜色来自列表框或组合框的内容(即在控件模板之外)。I'd like to have black text on white background when the items are unselected, and when selected would like black background with white text. 不幸的是,我无法弄清楚如何更改文本颜色。我正在努力寻找在选定背景颜色和未选定背景颜色之间形成鲜明对比的颜色。

签入 Silverlight 3,您似乎也无法在那里完成。

4

1 回答 1

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 下,您就可以绑定它了。

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

于 2010-08-11T18:00:03.903 回答