WPF ComboBox BorderBrush和BorderThickness在样式上不能一致地工作

时间:2016-12-01 16:18:24

标签: wpf xaml datatrigger wpf-style

我正在尝试根据绑定值将ComboBox的边框更改为更粗和更红,但属性的行为不符合预期。当Value为Null时,下面的代码将正确地将BorderThickness设置为2,但BorderBrush不会设置为Red;我添加了黄色的setter进行测试,但它也无法正常工作。

<ComboBox Grid.Column="2"
          Margin="0,10"
          ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.AllConfigurations}"
          DisplayMemberPath="Name"
          SelectedItem="{Binding Value}">
    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Setter Property="BorderBrush" Value="Yellow"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Value}" Value="{x:Null}">
                    <Setter Property="BorderBrush" Value="Red" />
                    <Setter Property="BorderThickness" Value="2" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>

相反,以下代码正确地将BorderBrush设置为Red,但它不会更改BorderThickness。

<ComboBox Grid.Column="2"
          Margin="0,10"
          ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.AllConfigurations}"
          DisplayMemberPath="Name"
          SelectedItem="{Binding Value}"
          BorderBrush="Red"
          BorderThickness="2"/>

因此,按照我的理解总结问题,BorderBrush在直接设置时更改边框颜色,但在从Style中的Setter设置时不会更改; BorderThickness在从样式中的Setter设置时更改边框粗细,但在直接设置时不会更改边框粗细。任何人都可以提供一个解释,说明为什么会发生这种情况以及如何在Value为空时使边框变粗和红色?

0 个答案:

没有答案