在下面的代码中,当鼠标在网格,网格的Background
预期为红色,但如预期它不执行的问题。使用触发器在XAML
<Grid>
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>
但是,如果我加入了Setter
使Background
绿色,它会被正确执行。
<Grid>
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Setter Property="Background" Value="Green"/><!-- at the former, added code-->
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>
我不知道为什么要这样,但你猜有用于设置Background
,造成这一问题的优先级。这里是来自MSDN的Dependency Property Value Precedence,我理解该引用的优先级,但我无法将此问题与优先级(MSDN)相关联。
此外,在上面的代码片段中,如果将Grid
替换为Button
,则这两个代码将不会按预期执行。
更新:添加按钮的情况下这个问题
<Button>
<Button.Style >
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Transparent"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
如果你有多余的时间,请阅读http://wangmo.wordpress.com/2008/12/12/pitfall-with-using-triggers-in-style-and-controltemplate/。对不起,烦人。他/她提到这个问题是“对FrameworkElement的属性在样式覆盖setter方法或控件模板,因此,由制定者的任何变化不会带来实际的任何变化。”我无法确定哪个是正确的。要清楚,你认为Button Button有什么用?我会尽快更新我的问题。 –
@jwJung - 是的,如果你明确地在像
CodeNaked
通过您的努力,我越来越好地解决了这个问题。你让我保证吗?在[MSDN](http://msdn.microsoft.com/en-us/library/ms743230.aspx)的优先顺序中,“如果您明确指出...但这不适用于Grid。”意味着优先级3(本地值),因此由于优先级而改变颜色是不适用的。对于Button的情况,我的quetion的代码片段是优先级6(样式触发器),但由于TemplatedParent模板(优先级4)定义了Button的颜色(默认颜色:灰色?),所以Button的背景将不会更改为红色,即使一只老鼠在它上面。 –