在我的示例中,无论我如何为控件中的行为定义样式,它都只获取绑定属性中定义的样式。例:
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="Gray"/>
<Setter Property="BorderThickness" Value="1"/>
<Style.Triggers>
<Trigger Property="Border.IsMouseOver" Value="True">
<Setter Property="Background" Value="Yellow"/>
</Trigger>
</Style.Triggers>
</Style>
....
<Border Background="{Binding UserColor}">
当鼠标过度控制时,背景不会变黄。
答案 0 :(得分:1)
这是正确的行为。删除直接分配并为您的样式添加一个setter:
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="Gray"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Background" Value="{Binding UserColor}"/>
<Style.Triggers>
<Trigger Property="Border.IsMouseOver" Value="True">
<Setter Property="Background" Value="Yellow"/>
</Trigger>
</Style.Triggers>
</Style>
答案 1 :(得分:0)
Control.Background
属性是DependencyProperty
,DependencyProperty
可以从各种来源设置,例如。 Style Setter
,Animation
,来自代码等。由于这个原因,Microsoft必须定义优先顺序,以决定更改DependencyProperty
值的哪些方法更重要其他
逻辑上决定使用内联XAML设置DependencyProperty
,就像在示例中一样,应该“覆盖”从其他来源设置的值,例如。来自Style
。这就是您的Background
Style
未在您的示例中显示的原因。有关DependencyProperty
值优先级列表的完整信息,请参阅MSDN上的Dependency Property Value Precedence页面。
更新&gt;&gt;&gt;
请注意,如果您想为Background
设置默认的Border
颜色,那么您应该在使用过的Style
和不内联中声明它,因为我们已经知道这不起作用:
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="Gray"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Background" Value="{Binding UserColor}"/> <!-- Default -->
<Style.Triggers>
<Trigger Property="Border.IsMouseOver" Value="True">
<Setter Property="Background" Value="Yellow"/>
</Trigger>
</Style.Triggers>
</Style>