将Style应用于ComboBox后,ComboBoxItem不显示

时间:2017-03-08 02:04:28

标签: wpf xaml

您好我正在制作WPF计划。但是我的ComboBox有问题

我需要像这段代码一样的组合框样式。

<ComboBox Height="28" Background="White" VerticalContentAlignment="Center" Width="120">
    <ComboBox.BorderBrush>
        <LinearGradientBrush EndPoint="0,20" MappingMode="Absolute">
            <GradientStop Color="#FFABADB3" Offset="0.05"/>
            <GradientStop Color="#FFE2E3EA" Offset="0.07"/>
        </LinearGradientBrush>
    </ComboBox.BorderBrush>
    <ComboBoxItem Content="Content1" IsSelected="True"/>
    <ComboBoxItem Content="Content2"/>
</ComboBox>

此代码效果很好。

分割样式和视图后,此代码不起作用。

实际上,应用于ComboBox但未显示ComboBoxItems的样式。

有什么问题?

样式部分

<Style x:Key="ComboBoxLikeTextBox" TargetType="{x:Type ComboBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ComboBox">
                <ComboBox Height="28" Background="White" VerticalContentAlignment="Center">
                    <ComboBox.BorderBrush>
                        <LinearGradientBrush EndPoint="0,20" MappingMode="Absolute">
                            <GradientStop Color="#FFABADB3" Offset="0.05"/>
                            <GradientStop Color="#FFE2E3EA" Offset="0.07"/>
                        </LinearGradientBrush>
                    </ComboBox.BorderBrush>
                </ComboBox>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

查看部分

<ComboBox Style="{DynamicResource ComboBoxLikeTextBox}">
    <ComboBoxItem Content="Content1" IsSelected="True"/>
    <ComboBoxItem Content="Content2"/>
</ComboBox>

1 个答案:

答案 0 :(得分:0)

所以你创建了一个整体风格,只有一个setter。并且您使用该setter将模板框替换为包含不同组合框的模板,该模板具有您想要的所有属性,但不会使用重新组合的组合框的子项填充自己。当然,那个组合框中没有孩子;你从来没有给过它。并且不需要创建新模板来设置高度和诸如此类的东西。模板是重型火炮,你不需要这样的简单风格。

使用样式设置器设置要设置的属性,而不是核对整个控件。像这样:

<Style TargetType="ComboBox" x:Key="ComboBoxLikeTextBox">
    <Setter Property="Height" Value="28" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Width" Value="120" />
    <Setter Property="BorderBrush">
        <Setter.Value>
            <LinearGradientBrush EndPoint="0,20" MappingMode="Absolute">
                <GradientStop Color="#FFABADB3" Offset="0.05"/>
                <GradientStop Color="#FFE2E3EA" Offset="0.07"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
</Style>