<Window x:Class="AiweeeTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources>
<SolidColorBrush x:Key="backcolorType" Color="Red"></SolidColorBrush>
<SolidColorBrush x:Key="forecolorType" Color="Green"></SolidColorBrush>
<Style x:Key="TextboxStyle" TargetType="{x:Type TextBox}">
<Setter Property="Background" Value="Yellow"/>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" Value="{StaticResource backcolorType}"/>
<Setter Property="Foreground" Value="{StaticResource forecolorType}"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<TextBox Name="textbox1" Width="100" Height="25" Style="{StaticResource TextboxStyle}" IsEnabled="False"/>
</Grid>
</Window>
我无法使用上面定义的触发器更新文本框的背景,但是当我复制整个文本框控件模板模板并用我自己的颜色替换“DisabledBackgroundBrush”时,它确实如此。有什么区别,我已经看到了这个问题的一些联系;但是我无法理解它背后的原因。据我所知,触发器按照它们的定义顺序触发,然后在窗口中本地定义的触发器应该能够在禁用时覆盖文本框的背景颜色。请澄清。
PS:我不想在这里做任何特别的事,但只是想明白为什么会如此。这让我对WPF感到有些沮丧,因为对于这样的情况,WPF并不直观。答案 0 :(得分:0)
我猜它与WPF将为DependencyProperty应用值的顺序有关。 This MSDN article有关于依赖属性优先级的一些很好的信息
基本上顺序是: