首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么禁用此WPF RoutedCommand绑定Context MenuItem?

在WPF中,RoutedCommand是一种用于执行命令的方法,它可以在UI元素之间传递。ContextMenu是一种允许用户在UI元素上右键单击时显示菜单的控件。MenuItem是一种用于在ContextMenu中显示可点击选项的控件。

要禁用WPF RoutedCommand绑定到Context MenuItem,可以通过以下方法:

  1. WindowUserControl的资源中定义一个RoutedCommand
代码语言:<Window.Resources>
复制
    <RoutedCommand x:Key="MyCommand" />
</Window.Resources>
  1. ContextMenu中创建一个MenuItem,并将其Command属性设置为在资源中定义的RoutedCommand
代码语言:<ContextMenu>
复制
   <MenuItem Command="{StaticResource MyCommand}" />
</ContextMenu>
  1. 在代码中,可以通过CommandManager.RegisterClassCommandBinding方法注册一个CommandBinding,并将其绑定到RoutedCommand
代码语言:txt
复制
CommandBinding commandBinding = new CommandBinding(MyCommand, Executed, CanExecute);
CommandManager.RegisterClassCommandBinding(typeof(Window), commandBinding);
  1. CanExecute方法中,可以通过返回false来禁用MenuItem
代码语言:txt
复制
private void CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = false;
}

这样,当用户右键单击UI元素并尝试单击MenuItem时,它将被禁用。

总结:

通过定义一个RoutedCommand,创建一个MenuItem并将其绑定到RoutedCommand,并在CanExecute方法中返回false,可以禁用WPF RoutedCommand绑定到Context MenuItem

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WPF命令(Command)介绍、命令和数据绑定集成应用

二:定义命令的实现                                               三:为命令创建一个触发器     WPF...典型的,UI控件能使用CanExecute来启用或禁用自己。也就是说,在相关的命令从CanExecute中返回False的时候,按钮将变得不可用。      ...现在,可以把Exit标记为私有类,并把标记转化为绑定到静态字段,代码如下: <MenuItem Header=...new RoutedCommand("Open", typeof(WinCommandAndBinding)); public static readonly RoutedCommand...这个例子虽然有点微不足道,不过可以使用CanExecute方法轻松地完成类似的行为,并针对“坏”文件禁用这个命令。然而,这里最重要的一点是,可以返回任何命令。

5.8K40

深入浅出话命令

转自:http://blog.csdn.net/lisenyang/article/details/18312387 WPF为我们准备了完善的命令系统,你可能会问:“有了路由事件为什么还需要命令系统呢?...1.1      命令系统的基本元素和关系 WPF的命令系统由几个基本要素构成,它们是: 命令(Command):WPF的命令实际上就是实现了ICommand接口的类,平时使用最多的就是RoutedCommand...本节中我们走进WPF命令,先由RoutedCommand入手,再创建自己的命令。...第一个层次比较浅,指的是当WPF命令库里面没有包含想要的命令时,我们就得声明自己定义的RoutedCommand实例。...但比较棘手的是,在WPF系统中,命令源(ButtonBase,MenuItem,ListBoxItem,Hyperlink)、RoutedCommand和CommandBinding三者互相依赖的相当紧密

1.6K40

WPF自学入门(十一)WPF MVVM模式Command命令

WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新。但是这并不是我们使用MVVM的正确方式。...在WPF中使用命令的步骤很简单 1.创建命令 2.绑定命令 3.设置命令源 4.设置命令目标 WPF中命令的核心是System.Windows.Input.ICommand接口,所有命令对象都实现了接口...在程序中处理的大部分命令不是RoutedCommand对象,而是RoutedUICommand类的实例,它继承自RouteCommand类。...WPF提供了一个很好的方式来解决事件绑定的问题--ICommand。很多控件都有Command属性,如果没有,我们可以将命令绑定到触发器上。接下来我们来先实现一个ICommand接口。...我们看到运行的数据,事件都是绑定的,实现了界面的完美分离。实际在处理问题是好像需要考虑通用性,这时我们能否把MVVM提取出来作为一个框架,来去更好的解决问题。

3.3K21

WPF 的命令的自动刷新时机——当你 CanExecute 会返回 true 但命令依旧不可用时可能是这些原因

WPF 中,你可以使用 Command="{Binding WalterlvCommand}" 的方式来让 XAML 中的一个按钮或其他控件绑定一个命令。...了解了这些,你可能能够解决你在 WPF 程序中命令绑定的一些坑。 ---- This post is written in multiple languages....WalterlvCommand}" /> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class Walterlv { // 省略了命令的初始化...如何手动刷新命令 调用以下代码,即可让 WPF 中的命令刷新其可用性: 1 CommandManager.InvalidateRequerySuggested(); WPF 的命令在何时刷新?...CommandManager.InvalidateRequerySuggested(); } 然而,并不是只在这些时机进行刷新,还有其他的时机,比如这些: 在 Menu 菜单的子菜单项打开的时候(参见 MenuItem.OnIsSubmenuOpenChanged

76330

WPF应用中一种比较完美的权限控制设计方式

然后另一个 可以绑定command 他可以通过canexecute 来影响界面是否可用 ,也是不错的方式 ,但是我由于一些特殊的原因 不能使用方式。...我们上面说了利用他的动态计算功能 ,此处可以说明了 那就是converter ,通过熟读wpf 绑定原理过程 观察它走的路线你就会知道 最终是通过converter暴露的,对我们就在此处进行截获 。...好 看看我们的绑定 来复习下wpf绑定原理 source是让其定位到一个静态变量 而不是当前自动分配的datacontext, 然后绑定到里面的RoleMgt属性。...Source={x:Static 这个是wpf设计很nice的地方 ,我们通过一个static的静态变量 但是类是new出来的 也就是单例模式,到处绑定

1.2K30

C# WPF MVVM开发框架Caliburn.Micro入门介绍①

这就是为什么我们称之为信息。动作消息的“冒泡”特性非常强大,非常有用,尤其是在主/细节场景中。除了调用之外,该机制还支持“CanExecute”保护。...如果该操作具有同名的相应属性或方法,但前面有“Can”一词,则该操作的调用将被阻止,UI将被禁用。操作还支持协同路由(见下文)。...此外,通过在Xaml中附加View.Context,我们支持同一视图模型上的多个视图。...Window Manager窗口管理器 服务提供以视图模型为中心的窗口显示方式(Silverlight中的ChildWindow、WPF中的Window、Windows Phone中的自定义本机样式主机...Bootstrapper引导程序 配置框架并使其启动和运行需要什么?

1.7K20

WPF内存优化

ExecutedRoutedEventArgs> executed, Action canExecute) { var rCommand = new RoutedCommand...public class CustomCollectionClass : INotifyPropertyChanged {} 在 WPF 中,不标记为 OneTime 必须侦听属性的一个数据绑定操作从源对象...遗憾的是,操作会导致公共语言运行库 (CLR) 可以创建从此 PropertyDescriptor 对象 X 的强引用。...优化内存占用的方式 使用依赖属性 我们通过依赖属性和普通的CLR属性相比为什么会节约内存? 其实依赖属性的声明,在这里或者用注册来形容更贴切,只是一个入口点。也就是我们平常常说的单例模式。...运行一个包含的控件的属性是数据绑定到的 WPF 应用程序DependencyObject对象。 该对象的生存期是超过控件的生存期。

1.5K41

C# WPF MVVM开发框架Caliburn.Micro 关于Conventions⑧

这就是为什么CM的约定是完全可定制的,如果不需要,甚至可以完全关闭。如果您要使用约定,并且由于它们在默认情况下处于启用状态,那么最好了解这些约定是什么以及它们是如何工作的。这就是本文的主题。...附加属性以两种方式工作。因此,如果默认情况下启用了约定,但需要逐个视图将其禁用,则只需将此属性设置为false。...Func负责使用提供的所有上下文信息在元素上创建绑定。最妙的是,如果需要,我们可以为每个元素定制绑定行为。...对于WPF和Silverlight,ItemsControl和Selector具有自定义绑定行为。...更改选项将更改所有常规绑定的应用方式。在内部使用以下函数: HasBinding—确定特定依赖项属性是否已在提供的元素上具有绑定。如果绑定已存在,则SetBinding将中止。

2.7K20

WPF 弹出 popup 里面的 TextBox 无法输入汉字 修复在 Popup 输入法不跟随在 WinForms 弹出的 WPF 的 TextBox 无法输入问题

如果发现使用了我的方法还是无法输入,那么需要看一下 TextBox 是否禁用输入法。...的 TextBox 无法输入问题 刚刚 Siberia 问了我一个问题,为什么 WinForms 弹出的 WPF 的文本框无法输入数字,但是可以输入其他的内容 一开始我认为的是绑定的问题,如果一个控件绑定了另一个控件...,或者有后台代码绑定,有另一个控件绑定了输入框都有方法让用户输入的数字不显示 如果是我在调试,我会先拿到 TextChanged 事件,看是不显示还是没有接收到输入 另外需要判断当前的焦点是否在 TextBox...new Window();  //WinWPF为想要显示的WPF窗体。...禁用TextBox的触摸后自动弹出虚拟键盘 - 唐宋元明清2188 - 博客园 解决Winform中弹出WPF窗体不能在文本框中输入的问题 - 飞鹰的专栏 - CSDN博客 Windows 窗体和 WPF

2.4K20

读 MAUI 源代码 理解可绑定对象和可绑定属性的存储机制

和 UWP 与 WPF 不同的是在 MAUI 里面,使用可绑定对象 BindableObject 替换了依赖对象的概念,我阅读了 MAUI 的源代码发现其实只是命名变更了,里面的机制和设计思想都是差不多的...在 MAUI 里面提供 BindableObject 用来支持可绑定属性机制和附加属性机制,本文将告诉大家在 MAUI 里面是如何在可绑定对象里面提供可绑定属性和附加属性的存储的机制 在 WPF 里面...通过字典定义可以了解到存储的核心实现就是将可绑定属性和对应的值存入到对象的字典里,例如给某个可绑定对象的某个叫 Xxx 的可绑定属性进行赋值,那将会对 _properties 字典更新 Xxx 属性的值内容...回到获取属性的方法上,是通过先获取对象的可绑定上下文信息,如果能获取到可绑定上下文,证明绑定对象的这个可绑定属性曾经被赋值过,需要用赋值更新的内容。...使用 MAUI 的可绑定属性和可绑定对象对比 WPF 的依赖属性和依赖对象的实现,可以看到 MAUI 的实现实在简洁很多。

82820

“老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春

没错,这就是早些年流行于WPF的MVVM技术,相比WinForms技术,WPF可以提供给UI设计人员更加强大的设计能力,做出更炫更好看的界面。...只不过MS的很多技术总是很超前技术更新很快,WPF新推出的时候WinForms还占据桌面开发主要领域,随后还没有火起来移动开发时代已经来临,基于Web的前端技术大大发展,从而风头盖过了WPF,但是WPF...SOD WinForms MVVM实现原理 要实现这种改变,对于被绑定方,必须具有属性改变通知功能,当绑定方改变的时候,通知被绑定方让它做相应的处理。...由于这里我们要绑定的对象是当前窗体的DataContext对象,所以需要浏览选择到主程序集,这样在属性名称一栏,会显示对象所有的属性和子属性。...MVVM模式总结 通过运行示例,相信你已经体验了MVVM的一些特点,但可能难以表述贴切,正好我跟几个WPF资深专家交流后,他们总结出了MVVM的几个核心特点(卖点): 1,视图逻辑(视图模型)和视图(

3.7K60

WPF 弹出 popup 里面的 TextBox 无法输入汉字

这是一个 wpf 的bug,在弹出Popup之后,如果 Popup 里面有 TextBox ,这时无法在里面输入文字。...如果发现使用了我的方法还是无法输入,那么需要看一下 TextBox 是否禁用输入法。...的 TextBox 无法输入问题 刚刚 Siberia 问了我一个问题,为什么 WinForms 弹出的 WPF 的文本框无法输入数字,但是可以输入其他的内容 一开始我认为的是绑定的问题,如果一个控件绑定了另一个控件...,或者有后台代码绑定,有另一个控件绑定了输入框都有方法让用户输入的数字不显示 如果是我在调试,我会先拿到 TextChanged 事件,看是不显示还是没有接收到输入 另外需要判断当前的焦点是否在 TextBox...new Window();  //WinWPF为想要显示的WPF窗体。

1.7K10

WPF 列表控件数据源绑定多个数据集合方法

WPF 用的多的列表控件如 ListBox 或 ListView 等,本文告诉大家在这些列表控件上进行绑定多个数据集合来源的多个实现方法。...,就需要在资源和 CompositeCollection 里面定义多个 CollectionViewSource 和 CollectionContainer 对象 如果绑定的集合数量不多,那么写法还成...,但如果集合数量比较多,而且需要不断变更顺序,那以上写法就有坑 方法请参考 WPF 很少人知道的科技 - walterlv 通过 CompositeCollection 动态绑定 在 ListView...但不足的地方在于绑定 ItemsSource 需要用到 DynamicResource 的方式,相对性能不如上面方法。为什么需要 DynamicResource 资源?...但实际上在有动态资源下,性能问题也是很小的问题,对比渲染控件本身,动态绑定性能可以忽略 通过多绑定方法 方法需要添加一点后台代码,定义 CompositeCollectionConverter 转换器

3.4K21
领券