我有一个文本框。启用后,我会得到一个很好的上下文菜单,其中包含剪切、复制和粘贴。
现在,当 TextBox 被禁用时,我想要一个不同的上下文菜单。我的意思是 contextMenu 应该只有 1 个选项,即复制。
我尝试将文本框包装在网格内,然后在该网格上应用了上下文菜单。但这没有什么区别。还有其他办法吗?
您可以使用TextBox 的IsReadOnly属性而不是禁用它。这将处理上下文菜单,这意味着唯一启用的选项将是“复制”。
禁用 TextBox 将告诉用户它无法与它交互,如果它是只读的,它的视觉样式略有不同,表明它仍然可以与之交互。
编辑
如果您处于 MVVM 场景中并且希望 ContextMenu 中包含动态项,只需将 ContextMenu 的 ItemsSource 绑定到您可以根据需要修改的集合。
编辑2
要从 xaml 修复此问题,您只需将所有项目添加到同一个 ContextMenu 并为 MenuItem 创建一个样式,该样式将根据父级的 IsEnabled 属性隐藏它们:
<Style TargetType="MenuItem" x:Key="menuItemStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBox}}, Path=IsEnabled}" Value="True">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
要在禁用的项目上显示上下文菜单,您可以使用:ContextMenuService.ShowOnDisabled="True"