2008-10-30 11 views
18

ich folgende Stil für eine Listbox erstellt haben, die ein Bild neben einem Text angezeigt wird:Ändern der Vordergrundfarbe eines Content in einer Listbox

<Style x:Key="ImageListBoxStyle" TargetType="{x:Type ListBox}"> 
    <Setter Property="SnapsToDevicePixels" Value="true"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
    <Setter Property="ScrollViewer.CanContentScroll" Value="True"/> 
    <Setter Property="ItemContainerStyle"> 
     <Setter.Value> 
      <!-- Simple ListBoxItem - This is used for each Item in a ListBox. The item's content is placed in the ContentPresenter --> 
      <Style TargetType="{x:Type ListBoxItem}"> 
       <Setter Property="SnapsToDevicePixels" Value="true"/> 
       <Setter Property="OverridesDefaultStyle" Value="true"/> 
       <Setter Property="VerticalContentAlignment" Value="Center"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
          <Grid SnapsToDevicePixels="true"> 
           <Border x:Name="Border"> 
            <Grid Height="40"> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="Auto"/> 
              <ColumnDefinition Width="*"/> 
             </Grid.ColumnDefinitions> 
             <Image 
              x:Name="DisplayImage" 
              Source="{Binding Path=ThumbnailImage}" 
              Height="30" 
              Width="30" 
              Grid.Column="0"/> 

             <ContentPresenter 
              x:Name="DisplayText" 
              HorizontalAlignment="Stretch" 
              VerticalAlignment="Center" 
              Grid.Column="1"/> 
             <!--<ContentPresenter.Resources> 
               <Style TargetType="{x:Type TextBlock}"> 
                <Setter Property="Foreground" Value="Black"/> 
               </Style> 
              </ContentPresenter.Resources>--> 

             <!--Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=DisplayMemberPath, Converter={StaticResource myDisplayMemberConverter}}"--> 
             <!--<Label 
              x:Name="Text" 
              Content="{Binding Path=FullNameAndTitle}" 
              Foreground="Black" 
              VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
              VerticalContentAlignment="Center" 
              HorizontalAlignment="Stretch" 
              Grid.Column="1" 
              Height="40"/>--> 
            </Grid> 
           </Border> 
          </Grid> 
          <ControlTemplate.Triggers> 
           <Trigger Property="IsSelected" Value="true"> 
            <!--<Setter Property="FontWeight" Value="Bold" TargetName="DisplayText"/>--> 
            <!--<Setter Property="Style" Value="{StaticResource SelectedTextStyle}" TargetName="DisplayText"/>--> 
            <Setter Property="Background" Value="DarkBlue" TargetName="Border"/> 
            <Setter Property="Width" Value="40" TargetName="DisplayImage"/> 
            <Setter Property="Height" Value="40" TargetName="DisplayImage"/> 
           </Trigger> 
          </ControlTemplate.Triggers> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListBox}"> 
       <Grid> 
        <Border x:Name="Border" Background="{TemplateBinding Background}" BorderBrush="Black" BorderThickness="{TemplateBinding BorderThickness}"> 
         <Grid> 
          <ScrollViewer Margin="1,1,1,1" Focusable="false" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
           <StackPanel IsItemsHost="true"/> 
          </ScrollViewer> 
         </Grid> 
        </Border> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsGrouping" Value="true"> 
         <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Ich habe die Content verwenden, wie ich Filterung bin was (textweise) mit dem DisplayMemberPath der ListBox selbst angezeigt wird.

Alles, was ich tun möchte, ist die Schriftart Weight auf Fett und den Vordergrund auf Weiß, wenn ein Element in der ListBox ausgewählt ist.

Hat jemand auf ein Problem wie dieses gestoßen? Ich habe mir einige verwandte Fragen angeschaut, aber die Leute konnten einen TextBlock verwenden, um ihre Probleme zu umgehen, was ich leider nicht kann.

Alle Informationen, die ppl geben kann, werden geschätzt.

Prost

+0

Sie auch die 'TextElement.Foreground' angefügte Eigenschaft direkt auf einem Steuer Eltern einstellen. – Sheridan

Antwort

37

Es gibt auch eine andere Art und Weise. Sie können

TextBlock.Foreground="YourColour" 

In diesem Fall in Ihrem ContentPresenter dieses Attribut hinzufügen, die Sie auch Animationen über diese Eigenschaft nutzen können.

+5

Dies scheint mit Bindungen nicht zu funktionieren. –

+1

Das funktioniert nicht an meinem Ende – Akanksha

18

Es ist alles in Ordnung, ich habe diese Frage selbst zu beantworten geschafft, ich habe versucht, den Vordergrund/Fontweight des Content zu modifizieren, die keine Definition für Vordergrund/Fontweight i benötigt enthält alle einfach Sie war:

<Setter Property="FontWeight" Value="Bold"/> 
<Setter Property="Foreground" Value="White"/> 

dh entfernen Sie das:

TargetName="DisplayText" 
8

Basierend auf this related answer konnte ich ein ähnliches Problem mit dem folgenden lösen:

<Setter TargetName="ctContentPresenter" Property="TextBlock.Foreground" Value="{StaticResource StyleForeColorBrush}" /> 
1
<Storyboard x:Key="Storyboard1"> 
     <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)" Storyboard.TargetName="myContentPresenter"> 
     <EasingColorKeyFrame KeyTime="0" Value="Black"/> 
     <EasingColorKeyFrame KeyTime="0:0:0.2" Value="White"/> 
     </ColorAnimationUsingKeyFrames>   
    </Storyboard> 
Verwandte Themen