ListBoxItem的样式不起作用

时间:2013-12-27 20:17:25

标签: c# wpf listboxitem

我正在尝试在列表框中设置ListBoxItems的样式,但ListBoxItem的内容不会显示,并且颜色的任何更改都不明显。唯一有效的是我已经应用到每个列表项底部的“边框底部”。

<Style x:Key="ListItemStyle" TargetType="{x:Type ListBoxItem}">
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="MinHeight" Value="30" />
    <Setter Property="Foreground" Value="Black" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Border BorderBrush="#FF66AFDE" BorderThickness="0 0 0 1" />
                <ControlTemplate.Triggers>
                    <Trigger Property="IsFocused" Value="True">
                        <Setter Property="Background" Value="Red"></Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style> 

2 个答案:

答案 0 :(得分:1)

使用 ListBoxItem 控制模板中的面板/容器/装饰器设置背景颜色。 (似乎设置选择背景颜色的逻辑会干扰控制其背景颜色的尝试。)

<ControlTemplate TargetType="{x:Type ListBoxItem}">
    <Border
        Name="PART_Border"
        Focusable="true"
        Background="{TemplateBinding Background}"
        BorderBrush="#FF66AFDE"
        BorderThickness="0 0 0 1"
    >
        <ContentPresenter />
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsFocused" Value="True">
            <Setter
                Property="Background"
                Value="Red"
                TargetName="PART_Border"
            />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

另请注意,Border.Focusable默认为 false 。如果将其设置为 true 不起作用(我承认,我还没有测试过),请使用不同的容器控件而不是Border。

此外,如果您要显示的内容有任何控件接收焦点(例如按钮或文本字段),触发器可能无法按预期工作,因为边框可能具有焦点控制内容有重点。此外,从控件到控件的选项卡可能会出现意外行为。如果你必须处理这种情况,请尝试在ItemTemplate中处理触发器。

关于ContentPresenter没有显示任何内容:根据ItemsSource中元素的类型,您可能需要定义 ListBox.ItemTemplate (或 ListBox.ItemTemplateSelector < / em>),否则 ContentPresenter 可能不知道要显示什么。

答案 1 :(得分:0)

试试这个

 <Style x:Key="ListItemStyle" TargetType="{x:Type ListBoxItem}">
        <Setter Property="OverridesDefaultStyle" Value="True" />
        <Setter Property="MinHeight" Value="30" />
        <Setter Property="Foreground" Value="Black" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <Border BorderBrush="#FF66AFDE" BorderThickness="0 0 0 1" x:Name="border">
                        <ContentPresenter/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="True">
                            <Setter TargetName="border" Property="Background" Value="Red"></Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

我希望这会有所帮助