在下面的代碼中,當鼠標在網格,網格的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的背景將不會更改爲紅色,即使一隻老鼠在它上面。 –