2012-04-20 5 views
3

を使用して、無効にされたMenuItemを自動的に非表示にします。私はそれが動作します。このように特定のMenuItemの内側に自分のスタイルを使用している場合 -MenuItemトリガが動作しません

<MenuItem 
    Command="{Binding RelativeSource={RelativeSource FindAncestor, 
         AncestorType={x:Type ContextMenu}}, 
         Path=PlacementTarget.DataContext.ExportCommand}" 
    Header="Export..."> 
    <MenuItem.Style> 
     <Style TargetType="{x:Type MenuItem}"> 
      <Style.Triggers> 
       <Trigger Property="IsEnabled" Value="False"> 
        <Setter Property="Visibility" Value="Collapsed" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </MenuItem.Style> 
</MenuItem> 

をしかし、私はこのようなResourceDictionaryで同じstyleを配置する場合、それは動作しません -

<Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}" > 
    <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Visibility" Value="Collapsed" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

私が欲しいですすべての私のメニュー項目のためのこの振る舞いを持っていて、私はこのスタイルを私のContextMenuの中のすべてのMenuItemに入れたくありません。それがうまくいかない理由は何ですか?

+0

スタイルをContextMenu.Resourcesに配置すると、MenuItemsの内部で機能しますか? – LPL

答えて

1

スタイルは、x:Keyhttp://msdn.microsoft.com/en-us/library/ms745683.aspx)が設定されていない場合にのみ、ターゲットタイプのすべてのインスタンスに自動的に適用されます。これはあなたの場合ですか?

+0

ありがとうNikolay、しかしそうではありません。私はx:Keyも使わずに試した。 ** TargetTypeプロパティとx:Key属性の関係** 最初の例で示したように、スタイルを割り当てることなくTargetTypeプロパティをTextBlockに設定すると、x:KeyスタイルをすべてのTextBlockエレメントに適用します。 **この場合、x:Keyは暗黙的に{x:Type TextBlock} **に設定されます。これは、x:Keyの値を明示的に** {x:Type TextBlock} **以外に設定した場合、そのスタイルは自動的にすべてのTextBlockエレメントに適用されないことを意味します。 – akjoshi

1

これは動作するようです。私はちょうどそれを試してみました:

<Grid> 
<Grid.Resources> 
    <Style x:Key="{x:Type MenuItem}" TargetType="MenuItem" > 
    <Setter Property="OverridesDefaultStyle" Value="False" /> 
    <Setter Property="TextBlock.Foreground" Value="Blue" /> 
    <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
     <Setter Property="Visibility" Value="Collapsed" /> 
     </Trigger> 
    </Style.Triggers> 
    </Style> 

</Grid.Resources> 

<TextBox Text="Hello!" IsReadOnly="True"> 
    <TextBox.ContextMenu> 
    <ContextMenu > 
     <MenuItem Header="Item1" /> 
     <MenuItem Header="Item2" IsEnabled="False"/> 
     <MenuItem Header="Item3" /> 
    </ContextMenu> 
    </TextBox.ContextMenu> 
</TextBox> 
</Grid> 
関連する問題