Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 菜单项触发器不工作_.net_Wpf_Triggers_Menuitem_Resourcedictionary - Fatal编程技术网

.net 菜单项触发器不工作

.net 菜单项触发器不工作,.net,wpf,triggers,menuitem,resourcedictionary,.net,Wpf,Triggers,Menuitem,Resourcedictionary,我想使用触发器自动隐藏禁用的菜单项。如果我在一个特定的MenuItem中像这样使用我的样式,它就会工作- <MenuItem Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.DataContex

我想使用
触发器
自动隐藏禁用的
菜单项
。如果我在一个特定的
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>

我希望所有菜单项都有这种行为,我不想在我的
ContextMenu
中的每个
MenuItem
上都使用这种样式。知道它为什么不工作吗?

只有在没有设置
x:Key
时,样式才会自动应用于目标类型的所有实例()。这是你的情况吗?

这似乎有效。我刚刚试过:

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


谢谢尼古拉,但事实并非如此。我也试过不用x:键。对于您的信息(来自您提供的链接)-如第一个示例中所示的TargetType属性和x:Key属性的关系,将TargetType属性设置为TextBlock而不指定样式x:Key会导致将样式应用于所有TextBlock元素。在本例中,x:Key隐式设置为{x:Type TextBlock}。这意味着,如果显式地将x:Key值设置为除{x:Type TextBlock}以外的任何值,则该样式不会自动应用于所有TextBlock元素。如果将样式放置到ContextMenu.Resources中,该样式是否适用于内部菜单项?
<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>