将样式应用于ListBoxItem而不影响其中的ComboboxItem

时间:2012-09-06 09:09:10

标签: wpf xaml styles listboxitem

我使用ListBox DataTemplate。单ListBoxItems显示为TextBlockComboBox。我现在想要使用ListBoxItems的样式而不将其用于内部ComboBoxes的项目。不幸的是,ComboBoxItem继承自ListBoxItem,这似乎使这变得不可能。或者我在这里遗漏了什么?

<ListBox Grid.Row="1" Grid.Column="1" Name="comboBoxI" Margin="2"
                ItemsSource="{Binding SomeCollection}" IsSynchronizedWithCurrentItem="True">
    <ListBox.Resources>
        <Style TargetType="ListBoxItem">
            <Style.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
                <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
            </Style.Resources>
        </Style>
    </ListBox.Resources>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" Width="320" Padding="1,1,1,1" 
                        <TextBlock.ToolTip>
                            <ToolTip Content="{Binding Path=Description}"/>
                        </TextBlock.ToolTip>
                </TextBlock>
                <ComboBox ItemsSource="{Binding SomeOtherCollection}" IsSynchronizedWithCurrentItem="True"
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding CreationInfo}" Width="Auto" Padding="1,1,1,1">
                                <TextBlock.ToolTip>
                                    <ToolTip Content="{Binding Path=Description}"/>
                                </TextBlock.ToolTip>
                            </TextBlock>
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                </ComboBox>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我还尝试为ComboBoxItem添加另一种样式,但在这种情况下我不知道如何将颜色重置为默认值。

感谢您的任何建议!

亨德里克。

1 个答案:

答案 0 :(得分:1)

也许有更好的解决方案。但正如您所提到的,您可以恢复默认颜色:

<Style TargetType="ComboBoxItem">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="{x:Static SystemColors.HighlightTextColor}"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.ControlColor}"/>
    </Style.Resources>
</Style>

<强>备注

不幸的是,仅在ListBoxItem中将ListBox样式应用于此ListBox.ItemContainerStyle将不起作用,因为您更改的系统画笔对所有内部控件而非ListBoxItem属性都有效。