【问题标题】:Style not works with Application Commands样式不适用于应用程序命令
【发布时间】:2013-01-23 00:35:57
【问题描述】:

我有 MenuItem 列表并使用 ApplicationCommnds,如剪切、复制、粘贴。当 Command 被禁用时,我想做一些事情。但样式不起作用。ApplicationCommand 的默认行为是 ii 如果禁用,则自动设置前景灰色.但它不适用于我的情况。所以我明确地尝试设置它。

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

【问题讨论】:

  • 样式声明是什么样的?
  • 样式_MenuItem 是在哪里定义的?在应用程序资源中?还是某处?
  • 你想做什么“某事”? menutiem 或其他 item 的样式更改,代码触发器,什么样的?
  • 实际上,如果当时没有选择任何文本复制,剪切命令应该被禁用。它被禁用,但看起来并没有被禁用。当我们将光标移动到它上面时,它没有被选中,但它的颜色保持不变。我希望它禁用时它的颜色应该不同。

标签: wpf wpf-controls command


【解决方案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>

截图

【讨论】:

  • Somnath - 根据代码 All MenuItem Forground 应该是红色的。但它仍然是黑色的。这是我的问题。
  • @user1939423 我已根据您的需要更新了答案。让我们认为启用的 MenuItems 将是绿色的,禁用的 MenuItems 将是红色的。我已经更新了答案。您也可以按照“iltzortz”提供的示例进行操作。希望这能帮助您解决问题。
【解决方案2】:

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

所以我想知道您是否可以使用键 _MenuItem 向我们展示模板或您的样式,也许我们可以判断您的情况有什么问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2022-01-24
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多