更改所选ListBox项的背景颜色

到目前为止,这是我的XAML。


    <ScrollViewer Grid.Column="1" Grid.RowSpan="2">


        <ListBox   Background="Black" ItemsSource="{Binding Path=ActiveLog}" >

            <ListBox.ItemTemplate>

                <DataTemplate>

                    <Grid Background="Black">

                        <Grid.ColumnDefinitions>

                            <ColumnDefinition Width="200"></ColumnDefinition>

                            <ColumnDefinition Width="*"></ColumnDefinition>

                        </Grid.ColumnDefinitions>

                        <Grid.RowDefinitions>

                            <RowDefinition></RowDefinition>

                            <RowDefinition></RowDefinition>

                        </Grid.RowDefinitions>

                        <TextBlock Grid.Column="0" Grid.Row="0" Foreground="White">

                            <TextBlock >Date:</TextBlock>

                            <TextBlock  Text="{Binding Path=LogDate}"/>

                        </TextBlock>

                        <TextBlock Grid.Column="1" Grid.Row="0" Foreground="White">

                            <TextBlock >Severity:</TextBlock>

                            <TextBlock  Text="{Binding Path=Severity}"/>

                        </TextBlock>

                        <TextBlock Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Foreground="LightGray" Text="{Binding Path=Message}"></TextBlock>

                    </Grid>

                </DataTemplate>

            </ListBox.ItemTemplate>

            <ListBox.Template>

                <ControlTemplate>

                    <StackPanel Background="Black" IsItemsHost="True" >

                    </StackPanel>

                </ControlTemplate>

            </ListBox.Template>


        </ListBox>

    </ScrollViewer>

唯一的问题是所选项目的右侧有一个蓝色框。我认为可以更改选择的颜色,但是找不到。


一只名叫tom的猫
浏览 1171回答 3
3回答

12345678_0001

您需要使用ListBox.ItemContainerStyle。ListBox.ItemTemplate指定应如何显示项目的内容。但是WPF仍将每个项目包装在ListBoxItem控件中,默认情况下,如果选中它,则将其Background设置为系统突出显示颜色。您不能停止WPF创建ListBoxItem控件,但是可以为它们设置样式(在您的情况下,将Background设置为始终为Transparent或Black或其他颜色),并使用ItemContainerStyle。juFo的答案显示了一种可能的实现方式,即在项目样式的上下文内“劫持”系统背景画笔资源;另一种可能更惯用的技术是对SetterBackground属性使用。

杨__羊羊

<UserControl.Resources>&nbsp; &nbsp; <Style x:Key="myLBStyle" TargetType="{x:Type ListBoxItem}">&nbsp; &nbsp; &nbsp; &nbsp; <Style.Resources>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Color="Transparent"/>&nbsp; &nbsp; &nbsp; &nbsp; </Style.Resources>&nbsp; &nbsp; </Style></UserControl.Resources>&nbsp;和<ListBox ItemsSource="{Binding Path=FirstNames}"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ItemContainerStyle="{StaticResource myLBStyle}">&nbsp;&nbsp;您只需覆盖listboxitem的样式(请参阅:TargetType是ListBoxItem)
打开App,查看更多内容
随时随地看视频慕课网APP