简体   繁体   中英

How can I change listbox selected item background and foreground?

<Window.Resources>
    <Style x:Key="ListBoxStyle" TargetType="{x:Type ListBox}">
        <Setter Property="Background" Value="{StaticResource ResourceKey=ListboxBack}"/>
        <Setter Property="Foreground" Value="Green"/>
        <Setter Property="Width" Value="284"/>
        <Setter Property="Height" Value="332"/>
        <Setter Property="Margin" Value="18,77,0,151"/>
        <Setter Property="ItemTemplate" Value="{DynamicResource DataTemplate1}"/>
        <Setter Property="HorizontalAlignment" Value="Left"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="Padding" Value="0,0,0,0"/>
</Style>

    <DataTemplate x:Key="DataTemplate1">
        <Grid Width="276" Height="36" Background="{x:Null}" Opacity="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0.069*"/>
                <ColumnDefinition Width="0.931*"/>
            </Grid.ColumnDefinitions>
            <TextBlock x:Name="recback" Padding="40,0,0,0" Text="{Binding [0], FallbackValue=Number}" Width="Auto" HorizontalAlignment="Stretch" Margin="-1.899,0,-5.334,0" Grid.Column="0" FontSize="13.333" Height="38.277" VerticalAlignment="Top" Foreground="Black" Background="{x:Null}" Opacity="1" Grid.ColumnSpan="2" />
            <Rectangle HorizontalAlignment="Stretch" Height="1" Margin="3.5,0" VerticalAlignment="Bottom" Width="Auto" Fill="White" Grid.ColumnSpan="2"/>
        </Grid>
    </DataTemplate>
</Window.Resources>

<ListBox Style="{StaticResource ResourceKey=ListBoxStyle}" BorderThickness="0" x:Name="listBox1" Foreground="White" FontSize="18" d:LayoutOverrides="VerticalAlignment" BorderBrush="{x:Null}" />

I create ListBox with DataTemplate . DataTemplate contains a Rectangle and a Textblock . When I select item in ListBox I want to change TextBlock foreground and Rectangle background. Could you help me?

Use a similar to the following approach. This way you will override the default Brushes with the specified x:Key used of this ListBox Only. Perhaps you need additional or different x:Key s to override

<ListBox>
    <ListBox.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue" />
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Green" />
    </ListBox.Resources>
</ListBox>

By reading again your question i understand that perhaps you also need DataTriggers in your DataTemplate. You might also try something like this Notice that Forground and BackGround should be set in the style not in TextBlock for this code to work:

  <TextBlock x:Name="recback" Padding="40,0,0,0" Text="{Binding [0], FallbackValue=Number}" Width="Auto" 
             HorizontalAlignment="Stretch" Margin="-1.899,0,-5.334,0" Grid.Column="0" FontSize="13.333" Height="38.277"
             VerticalAlignment="Top" Opacity="1" Grid.ColumnSpan="2">
      <TextBlock.Style>
          <Style TargetType="{x:Type TextBlock}">
              <Setter Property="Foreground" Value="Black"/>
              <Setter Property="Background" Value="{x:Null}"/>
              <Style.Triggers>
                  <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True">
                      <Setter Property="Foreground" Value="Red"/>
                      <Setter Property="Background" Value="Yellow"/>
                  </DataTrigger>
              </Style.Triggers>
          </Style>
      </TextBlock.Style>
  </TextBlock>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM