2013-07-15 38 views
3

每次我想我終於得到WPF/XAML直觀的東西像這樣拿出(咆哮以上)...樣式觸發器產生任何影響

我想實現一個「可憐的人」切換菜單項按鈕。從本質上講,當它被檢查時,應該說「公制」,什麼時候不檢查 - 「帝國」。我認爲它應該相當簡單,XAML,但我不能得到它的工作。

這裏是我的嘗試:

<MenuItem IsCheckable="True" IsChecked="True"> 
    <Style> 
     <Style.Triggers> 
      <Trigger Property="IsChecked" Value="True"> 
       <Setter Property="Header" Value="Metric"/> 
      </Trigger> 
      <Trigger Property="IsChecked" Value="False"> 
       <Setter Property="Header" Value="Imperial"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</MenuItem> 

它給了我一個錯誤「成員‘器isChecked’無法識別或不accssible」(同爲頭)。

錯誤消失,當我做<Style TargetType="{x:Type MenuItem}">,但它什麼也沒做。

我直接嘗試沒有<Style>

<MenuItem.Triggers> 
    <Trigger...> 
</MenuItem.Triggers> 

首先,它給了我同樣的錯誤如上,但是當我改變了屬性Property="MenuItem.IsChecked"就開始尖叫,只有EventTriggers是允許的。

我也試圖與一個DataTrigger(當然,我還是不完全瞭解觸發器之間的差異):

<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}}, Path=IsChecked}" Value="True"> 
    <Setter Property="Header" Value="Metric"/> 
</DataTrigger> 

無影響。

幫助......請......

回答

3

你必須通過聲明<MenuItem.Style>元素的<Style>作爲子元素的菜單項的Style屬性分配。

<MenuItem IsCheckable="True" IsChecked="True"> 
    <MenuItem.Style> 
     <Style TargetType="MenuItem"> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter Property="Header" Value="Metric"/> 
       </Trigger> 
       <Trigger Property="IsChecked" Value="False"> 
        <Setter Property="Header" Value="Imperial"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </MenuItem.Style> 
</MenuItem> 
+0

神聖的廢話...我想我試過每一種組合。它的工作 - 謝謝。 @Clemens,你能解釋爲什麼沒有''這是不正確的? –

+2

因爲那麼你不會指定'Style'屬性,而只是將一些東西添加到不是另一個MenuItem的'Items'集合,因此被忽略。 – Clemens

+0

@NewDev在這種情況下[MenuItem.IsChecked](http://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.ischecked.aspx)當只有2個可能的值時,寧可有兩個獨立的'觸發器',只需選擇一個Value作爲'Style'的默認設置器,並且只有一個觸發器來切換該值。 – Viv