样式不适用于应用程序命令

时间:2013-02-07 13:31:47

标签: wpf wpf-controls command

我有MenuItem List并使用像剪切,复制,粘贴这样的ApplicationCommnds。我希望在Command被禁用时做一些事情。但是样式不能正常工作.ApplicationCommand的默认行为是ii如果禁用它会自动设置foregroud灰色但它不适用于我的情况。所以我明确地尝试设置它。

<TextBox x:Name="AssignmentTextBox" >
    <TextBox.ContextMenu>
        <ContextMenu Background="White">
            <MenuItem Command="ApplicationCommands.Undo" Style="StaticResource _MenuItem}"/>                                 
            <Separator />
            <MenuItem Command="ApplicationCommands.Cut"   Style="{StaticResource _MenuItem}"/>
            <MenuItem Command="ApplicationCommands.Copy"  Style="{StaticResource _MenuItem}" />
            <MenuItem Command="ApplicationCommands.Paste"  Style="{StaticResource _MenuItem}"/>                                    
            <Separator  />
            <MenuItem Command="ApplicationCommands.SelectAll"  Style="{StaticResource _MenuItem}"/>
        </ContextMenu>
    </TextBox.ContextMenu>
</TextBox>

2 个答案:

答案 0 :(得分:1)

知道了。在为第一个MenuItem设置Style属性值时,您错过了一个括号 {

什么是错误的

<MenuItem Command="ApplicationCommands.Undo" Style="StaticResource _MenuItem}"/> 

什么是正确的

<MenuItem Command="ApplicationCommands.Undo" Style="{StaticResource _MenuItem}"/> 

[已编辑] 在下面的测试用例中,启用的MenuItems将为绿色,禁用的MenuItems将为红色。希望这有助于您解决问题

<ContextMenu Background="White">
       <ContextMenu.Resources>
            <Style x:Key="_MenuItem1" TargetType="{x:Type MenuItem}">
                   <Style.Triggers>
                          <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsEnabled}" Value="false">
                              <Setter Property="Foreground" Value="Red"/>
                          </DataTrigger>
                          <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsEnabled}" Value="True">
                              <Setter Property="Foreground" Value="Green"/>
                          </DataTrigger>
                    </Style.Triggers>
            </Style>
      </ContextMenu.Resources>
      <MenuItem Command="ApplicationCommands.Undo" Style="{StaticResource _MenuItem1}"/>
      <Separator />
      <MenuItem Command="ApplicationCommands.Cut"   Style="{StaticResource _MenuItem1}"/>
      <MenuItem Command="ApplicationCommands.Copy"  Style="{StaticResource _MenuItem1}" />
      <MenuItem Command="ApplicationCommands.Paste"  Style="{StaticResource _MenuItem1}"/>
      <Separator  />
      <MenuItem Command="ApplicationCommands.SelectAll"  Style="{StaticResource _MenuItem1}"/>
  </ContextMenu>

<强>截图

enter image description here

答案 1 :(得分:0)

似乎您更改了MenuItem模板或覆盖了前景,因此CommandCan执行无法更新正确的可视元素以呈现为“禁用”,这应该是灰色。

所以我想知道你是否可以用键_MenuItem向我们展示模板或你的风格,也许我们可以告诉你的情况有什么问题。