样式ListBoxItem的嵌套ListBoxes [WPF]

时间:2009-07-11 11:36:08

标签: .net wpf listbox

我有ListBoxListBoxItem,其中包含嵌套的ListBox。现在我希望顶级ListBox项目没有蓝色背景,然后选择它们(见图)。

Example Image http://img43.imageshack.us/img43/237/window1.png

我尝试使用下面的XAML样式将背景颜色更改为透明,如此blog post中所述。这样可以,但它也会更改嵌套ListBox中项目的选定背景颜色。如何将其更改为仅适用于顶级项目?

<Window x:Class="WpfTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="350" Width="352">
    <Grid>
        <Grid.Resources>
            <DataTemplate x:Key="SampleItemTemplate">
                <Border Margin="5" Background="Gray" CornerRadius="3">
                    <Border.BitmapEffect>
                        <DropShadowBitmapEffect/>
                    </Border.BitmapEffect>
                    <StackPanel Margin="2">
                        <TextBlock Text="{Binding Path=Lid, StringFormat='ProvID: {0}'}"/>
                        <ListBox ItemsSource="{Binding Path=TestOrders}"/>
                    </StackPanel>
                </Border>
            </DataTemplate>
        </Grid.Resources>
        <Button Height="23" Name="button1" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="75" Margin="0,0,12,12" Click="button1_Click">Button</Button>
        <ListBox Name="listBox1" Margin="12,12,12,41" ItemsSource="{Binding}" ItemTemplate="{StaticResource SampleItemTemplate}">
            <ListBox.Resources>
            <Style TargetType="{x:Type ListBoxItem}">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
                </Style.Resources>
            </Style>
            </ListBox.Resources>
        </ListBox>
    </Grid>
</Window>

据我所知,此样式适用于ListBoxItem类型的所有对象,但如何才能将其应用于listbox1中的项?

<Style TargetType="{x:Type ListBoxItem}">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
    </Style.Resources>
</Style>

可能有更好的方法来实现我想要的,在这种情况下,请告诉我!

2 个答案:

答案 0 :(得分:2)

您是否需要“内部”和“外部”项目才能选择?我可能会坚持使用ItemsControl作为外部列表,只需让内部项目可选。然后你可以设置ListBoxItem的样式而不影响“外部”项。

答案 1 :(得分:1)

我同意Matt(看起来您可以在ItemsControl内为主列表添加ScrollViewer,但您也可以将颜色重置为子项范围内的默认值ListBox ES:

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{x:Static SystemColors.HighlightBrush}"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.ControlBrush}"/>