C# 如何设置ListBoxItem的样式

C# 如何设置ListBoxItem的样式,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,这是我用XAML编写的代码。然而,它似乎不会影响任何事情 so上有很多帖子都有类似的问题,但他们的回答都是“使用ListBox.ItemContainerStyle”,我已经这样做了:例如和 我所期望的是,没有背景,没有边框,项目不可聚焦 我做错了什么?重新定义您的ListBoxItem的ControlTemplate。下面的示例代码使用redish颜色只是为了说明这一点,但您可以将其替换为透明的: <Border Grid.Row="1" Padding="15" Margin="15"

这是我用XAML编写的代码。然而,它似乎不会影响任何事情

so上有很多帖子都有类似的问题,但他们的回答都是“使用
ListBox.ItemContainerStyle
”,我已经这样做了:例如和

我所期望的是,没有背景,没有边框,项目不可聚焦


我做错了什么?

重新定义您的
ListBoxItem
ControlTemplate
。下面的示例代码使用redish颜色只是为了说明这一点,但您可以将其替换为透明的:

<Border Grid.Row="1" Padding="15" Margin="15" BorderBrush="LightBlue" Background="AliceBlue" BorderThickness="1">
        <ListBox ItemsSource="{Binding Configs}">
            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <Setter Property="Background" Value="Transparent" />
                    <Setter Property="Focusable" Value="False" />
                    <Setter Property="BorderThickness" Value="0" />
                </Style>
            </ListBox.ItemContainerStyle>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <view:Config />
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Border>

项目1
项目2
项目3
项目4
项目5

并根据需要使用透明背景、无焦点、无突出显示:


您可以在资源中使用样式,如:

<Window x:Class="WpfApplication235.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    xmlns:local="clr-namespace:WpfApplication235"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>

    <x:Array x:Key="SampleData" Type="{x:Type sys:String}">
        <sys:String>Item 1</sys:String>
        <sys:String>Item 2</sys:String>
        <sys:String>Item 3</sys:String>
        <sys:String>Item 4</sys:String>
        <sys:String>Item 5</sys:String>
    </x:Array>

    <Style x:Key="ListBoxItemStyle1" TargetType="{x:Type ListBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <TextBlock Text="{Binding}">
                        <TextBlock.Style>
                            <Style TargetType="{x:Type TextBlock}">
                                <Style.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Background" Value="#1FFF0000"></Setter>
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </TextBlock.Style>
                    </TextBlock>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</Window.Resources>

<Grid>

    <ListBox x:Name="listBox" ItemsSource="{StaticResource SampleData}" 
             ItemContainerStyle="{StaticResource ListBoxItemStyle1}"
             Height="150" Margin="0" Width="250"/>

</Grid>

并删除如下代码:

<Window.Resources>

    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="FocusVisualStyle" Value="{x:Null}" />
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Foreground" Value="#D8D8D8"/>
        <Setter Property="FontSize" Value="15"/>
        <Setter Property="FontWeight" Value="400"/>
        <Setter Property="Height" Value="30"/>
        <!--and so on whatever you want...-->
    </Style>

</Window.Resources>

并且不要在listBox中使用样式中使用的任何属性,否则它将不会表现为样式中描述的行为

<ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="Background" Value="Transparent" />
        <Setter Property="Focusable" Value="False" />
        <Setter Property="BorderThickness" Value="0" />
    </Style>
</ListBox.ItemContainerStyle>