2011-04-27 47 views
6

從WPF切換到Silverlight 4.0後,我陷入了一些非常基本的事情。似乎沒有辦法在我的樣式中使用觸發器。這將如何工作?如何在Silverlight 4.0中使用Style.Triggers?

例如在這裏,我已經創建了一個DataGrid的columnHeader風格我的資源字典內:

<Style x:Key="DataGridColumnHeaderStyle" TargetType="sdk:DataGridColumnHeader" > 
     <Setter Property="Background" Value="#88800080" /> 
     <Setter Property="Foreground" Value="White" /> 
     <Style.Triggers> 
      <Trigger Property="SortDirection" Value="{x:Null}"> 
       <Setter Property="Background" Value="{DynamicResource DataGridHeaderBackgroundBrush}" /> 
       <Setter Property="BorderBrush" Value="Transparent" /> 
      </Trigger> 
      <MultiTrigger> 
       <MultiTrigger.Conditions> 
        <Condition Property="IsMouseOver" Value="True" /> 
        <Condition Property="SortDirection" Value="{x:Null}" /> 
       </MultiTrigger.Conditions> 
       <Setter Property="Background" Value="{StaticResource DataGridHeaderMouseOverBackgroundBrush}" /> 
       <Setter Property="BorderBrush" Value="{StaticResource DataGridHeaderBorderBrush}" /> 
      </MultiTrigger> 
... 

一些谷歌的搜索,從2009年年初要求嘗試使用轉換器來代替,但我完全被卡住與此有關。我真的很感激,如果有人能給我一個關於如何去做的暗示。

回答

7

Expression Blend爲Silverlight添加了對WPF類型觸發器的支持。這blog post解釋這更多。

但總而言之,您不會像使用WPF那樣獲得與這些觸發器相同的值優先級。含義,樣式觸發器可以覆蓋在元素上明確設置的設置。

Silverlight使用VisualStateManager概念來「主題」或自定義控件的外觀。它有效地迫使你定義「固定」狀態,如懸停(即IsMouseOver = true)或按下。然後,您可以在進入或退出這些狀態時應用動畫。所以你可以說,當懸停時給背景畫刷添加動畫效果,讓它看起來很h look。

VisualStateManager方法使得定製控件外觀的工具變得更加容易。這在這個blog post更詳細地顯示。

因此,簡而言之,您將無法一對一地翻譯它。你會發現有很多這樣的事情。例如,在UIElement上沒有IsMouseOver屬性,就像在WPF中一樣。

+0

@Kave - 基本上,是的:-)第一個鏈接顯示了一些簡單的解決方法,但是整體VSM並不像觸發器那麼有趣。 – CodeNaked 2011-04-28 23:11:07

+0

魔獸瘋狂。觸發器是WPF的一個重要組成部分。無法想象沒有他們:)但我沒有選擇,而是擅長 – Houman 2011-04-29 08:42:12

相關問題