2009-07-14 10 views
0

J'ai trouvé que la couleur de la police vient du contenu (à l'extérieur de la ControlTemplate) d'une zone de liste ou combobox. Je voudrais avoir un texte noir sur fond blanc lorsque les éléments ne sont pas sélectionnés et, une fois sélectionnés, ils aimeraient un fond noir avec du texte blanc. Malheureusement, je n'ai pas été capable de comprendre comment changer la couleur du texte. J'ai du mal à trouver des couleurs qui contrastent bien entre la couleur de fond sélectionnée et non sélectionnée.Réglage de la couleur de la police sélectionnée pour être différente de la couleur de la police dans le contrôle non sélectionné listbox

vérifié dans Silverlight 3 et vous ne semblez pas capable de le faire là non plus.

Répondre

0

j'ai réussi à faire une chose semblable dans Silverlight 4 pour une ListBox éclater sous AutoCompleteBox, mais il était de grandes quantités de viol Binging et XAML.

Fondamentalement, vous devez créer un style ListBoxItem et forcer un hackery de modèle de contrôle en dessous. Ceci alors vous pouvez appliquer sur votre ListBox et cela devrait fonctionner. Je viens de copier le code correspondant du projet sur lequel je travaille, donc vous devrez le modifier un peu, mais cela changera à la fois la police et la couleur du rectangle de sélection sur la souris, donc ça devrait être un super début.

<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> 

Il devrait aller directement sous UserControl.Resources et vous serez prêt à le lier. Faites-moi savoir si vous avez réussi ou avez besoin de plus d'explications!

+0

Travailler sur un nouveau projet maintenant, mais je vais vérifier quand j'ai du temps libre. à votre santé –

Questions connexes