问题标签 [routed-commands]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1374 浏览

c# - RoutedUICommand PreviewExecuted 错误?

我正在使用 MVVM 设计模式构建应用程序,并且我想使用 ApplicationCommands 类中定义的 RoutedUICommands。由于 View 的 CommandBindings 属性(读取 UserControl)不是 DependencyProperty,我们无法将 ViewModel 中定义的 CommandBindings 直接绑定到 View。我通过定义一个抽象的 View 类来解决这个问题,该类以编程方式绑定它,基于 ViewModel 接口,该接口确保每个 ViewModel 都有一个 CommandBindings 的 ObservableCollection。这一切都很好,但是,在某些情况下,我想执行在不同类(视图和视图模型)相同命令中定义的逻辑。例如,保存文档时。

在 ViewModel 中,代码将文档保存到磁盘:

乍一看,前面的代码就是我想要做的,但是文档绑定到的 View 中的 TextBox 只有在失去焦点时才更新它的 Source。但是,我可以通过按 Ctrl+S 来保存文档而不会失去焦点。这意味着文档在源中更新的更改之前保存,有效地忽略了更改。但是由于出于性能原因将 UpdateSourceTrigger 更改为 PropertyChanged 不是一个可行的选项,因此必须在保存之前强制进行更新。所以我想,让我们使用 PreviewExecuted 事件在 PreviewExecuted 事件中强制更新,如下所示:

但是,将处理程序分配给 PreviewExecuted 事件似乎完全取消了该事件,即使我明确地将 Handled 属性设置为 false。所以我在前面的代码示例中定义的 executeSave 事件处理程序不再执行。请注意,当我将 cb.PreviewExecuted 更改为 cb.Executed 时,两段代码都会执行,但顺序不正确。

我认为这是 .Net 中的一个错误,因为您应该能够向 PreviewExecuted 和 Executed 添加一个处理程序,并让它们按顺序执行,前提是您没有将事件标记为已处理。

任何人都可以确认这种行为吗?还是我错了?这个错误有解决方法吗?

0 投票
1 回答
2084 浏览

wpf - DelegateCommand vs RoutedCommand 和手势 - WPF

在构建复合 WPF 应用程序时,DelegateCommand 是否支持手势?我正在尝试创建一个由 MenuItem 和一个 Button 使用的命令,它可以通过键盘快捷键访问,但它位于单独程序集中的类中。

我可以使用 RoutedCommand,但我想尽量减少任何代码隐藏。

0 投票
1 回答
1366 浏览

silverlight-4.0 - Silverlight 中的路由命令

是否可以在 Silverlight 4 beta 版本中使用 RoutedCommand,例如 ApplicationCommand.Copy、ApplicationCommand.Paste 等?

0 投票
1 回答
2465 浏览

wpf - WPF 两个命令处理程序,一个命令

我来自第三方控件。它正在实现 ApplicationCommands.SelectAll。但是我想要的行为略有不同。没有我可以覆盖的虚拟方法,当我注册一个类处理程序时,就像这样

我的方法没有被调用。我派生的第三方控件是标记

e.Handled=true;

在它的命令处理程序中(我知道这是因为我已经看到了源代码,但我无法修改它)

我能做些什么?

0 投票
3 回答
1648 浏览

wpf - 是否可以让 CommandManager 仅重新查询特定的 WPF 命令而不是全部?

我正在尝试为我的 MVVM 应用程序实现一个高度响应的 UI,所以我选择让所有命令处理程序自动执行,BackgroundWorker这样它们就不会阻塞 UI。

但同时,我不希望用户能够在后台执行相同的命令时执行它。解决方案似乎很明显:

  1. Executed调用处理程序时,让CanExecute处理程序返回false
  2. 启动BackgroundWorker异步
  3. 完成BackgroundWorker后,让CanExecute处理程序true再次返回。

问题是,我需要在第 1 步之后通知 WPF,并在第 3 步之后再次通知 WPF,该步骤CanExecute已更改并且应该是必需的。我知道我可以通过调用来做到这一点CommandManager.InvalidateRequerySuggested,但这会导致CanExecute所有其他命令的处理程序也被重新查询。有很多命令,这不好。

有没有办法要求重新查询特定命令 - 即当前正在执行的命令?

TIA

0 投票
2 回答
1341 浏览

wpf - 路由命令的所有者类型应该是什么?

我正在使用 wpf 自定义命令。在编写自定义命令时,需要定义所有者类型。它的描述说它是注册命令的类型。我看到了一些自定义命令示例,其中 Owner 类型是 UIElement,而在其他一些类型中则是类名本身。有什么不同?所有者类型应该是什么?

0 投票
1 回答
1066 浏览

c# - 如何从指定事件触发路由命令?

我对 WPF 中的命令有一个简单的问题:我有一个带有 ICommand 绑定到 Command 属性的按钮,当我单击此按钮时,该命令将启动,并且哇它可以工作:)

现在我想在按下按钮时启动特定命令(我认为是MouseLeftButtonDown事件),但我不知道如何将多个命令放在一个按钮上,并指定将启动命令的事件。

你有什么主意吗 ?也许是自定义控件?

谢谢你的帮助,
安托万。

0 投票
1 回答
2220 浏览

wpf - AvalonDock + UserControl + DataGrid + ContextMenu 命令路由问题

我从MenuItemsof 的命令传播中得到了奇怪的行为ContextMenu

我有以下类型的布局:ContextMenu为每个inside设置,DataGridRow而后者又位于AvalonDock 内部。如果我摆脱停靠或围绕我的网格,就没有问题。而不是也没有这个问题。DataGridUserControlDockableContentUserControlListBoxDataGrid

代码隐藏也很简单:

所以这就是问题所在:右键单击选定的行(如果它在右键单击之前被选中)我的命令被禁用。在这种情况下,命令是“缩放”,但可以是任何其他命令,包括自定义命令。

我不知道这里有什么问题。SNOOP 表明,在此传播失败的情况下,由“PART_ShowContextMenuButton”(按钮)处理,而不是UserControlCanExecute它是对接标头的一部分。

UserControls在 AvalonDock 内托管的 UI 命令传播方面遇到了其他问题,但这是最容易重现的问题。

0 投票
1 回答
1027 浏览

wpf - 在后面的代码中设置 RoutedCommand.Execute 中的 RelativeSource CommandTarget

我有一个名为命令的静态类。其中一个 RoutedCommands 称为 ConfirmNoPrint。我想在我的自定义控件后面的代码中执行它,如下所示:

在自定义控件类中,我有一个 Binding 实例,其 RelativeSource 属性设置如下:

我可以使用 _mainControlBinding 的属性之一来获取需要作为 Commands.ConfirmNoPrint.Execute 的第二个参数传递的 IInputElement 的实例吗?

ConfirmNoPrint 的命令绑定是我的自定义控件的父级,但它位于不同的程序集中。我无法添加对它的引用,因为它会导致循环引用。

我完全在吠叫错误的树?

0 投票
1 回答
513 浏览

wpf - 如何以多窗口模式在应用程序级别启动 RoutedCommand?

我在一个应用程序中有多个窗口,例如 window1、window2 和 window3。

一个 RoutedCommand(使用 KeyGesture F11)绑定在 window1 中。如何通过按 F11 启动该路由命令,而 window2 具有输入焦点?

在 WinForm 应用程序中,我使用 MessageFilter 来检测 F11,但在 WPF 中,如何做到这一点?