3

無効になっているtriggerを自動的に非表示にするためにを使用したい。このような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>

しかし、同じものstyleをこのように配置すると、ResourceDictionary機能しません-

<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>

すべてのメニュー項目にこの動作をさせたいのですが、このスタイルをすべてMenuItemの内部に配置したくありませんContextMenu。なぜそれが機能しないのですか?

4

2 に答える 2

1

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

于 2012-04-20T11:41:40.783 に答える
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>
于 2012-04-20T18:49:11.987 に答える