问题标签 [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 投票
1 回答
1032 浏览

wpf - 如何在视图中拦截 RoutedCommand 的执行?

在 WPF / MVVM 应用程序中,我试图找到一种代码有效的方法来Cursors.Wait在任何冗长的操作之前将主视图光标设置为,并在完成后将其恢复为默认光标。

由于所有操作都是使用路由命令调用的,我想找到一种拦截命令执行的方法,理想情况下是通过创建一个包含内置路由命令实例的通用命令类,但我无法想象如何做这个。

具体来说,该RoutedCommand.Execute方法不是虚拟的,因此我需要另一种机制来拦截它的调用。另外,我不确定通用命令类的实例如何引用它必须为其设置光标的视图。

请问有什么建议吗?

0 投票
1 回答
1008 浏览

wpf - RoutedCommand.CanExecuteChanged 事件未在 ElementHost 内持续触发

(背景:我正在分阶段将 WinForms 应用程序移植到 WPF。目前,我仍然有一个 WinForms 主窗体,其中包含一个包含 WPF 内容的 ElementHost。)

我希望在某些ApplicationCommand(例如CutCopyPaste )更改其 .CanExecute 的值时告知我的应用程序。我认为订阅像 ApplicationCommands.Cut.CanExecuteChanged 这样的全局事件很简单,但我注意到一些奇怪的行为,它似乎并没有被一致地调用。

例如,我创建了一个简化的 WinForms 测试应用程序,它只有一个 ElementHost。然后我向它添加了一个 WPF 文本框并将 CanExecuteChanged 处理程序附加到它:

奇怪的是,当我执行诸如在文本框中选择文本之类的操作时,会调用使用内联 lambda/delegate 的处理程序。但是,使用实例方法订阅的那个不会被调用。

此外,在我更复杂的应用程序中,我根本没有看到 CanExecute 被调用,即使我为处理程序使用内联委托也是如此。

0 投票
1 回答
140 浏览

wpf - CommandSource 何时会引发 CanExcute 事件

理想情况下,实现ICommandSource接口的控件何时会引发 CanExecute事件?我试图向处理程序添加一个断点以检查它何时被引发,并且每当控件呈现在屏幕上时似乎都会执行它。有人能解释一下它什么时候会被提高以及如何随意提高吗?

0 投票
3 回答
3518 浏览

wpf - 带有每个选项卡绑定的 WPF 路由命令

我打算禁用和启用 TabControl 外部的按钮,就像更改当前选项卡时 TabItem 内部的按钮一样。但是 TabItem 的 CommandBindings 似乎不会影响“向上”视觉树。这样做的正确方法是什么?

使用此 XAML:

使用此代码:

0 投票
1 回答
1425 浏览

wpf - 我可以使用 Caliburn 绑定到 RoutedCommands 吗?

将 WPF 的内置 RoutedCommands 与Caliburn一起使用的最佳方式是什么?

例如,在我的 shell 中,我有一个 Edit 菜单,其中有一个 Copy 项,附加到以下标准命令ApplicationCommands

我希望这个项目在它有焦点时由 a 处理,TextBox当它们有焦点时由我自己的控件处理。在我的控件中,我可以Execute通过CanExecute创建一个CommandBinding

有没有办法使用 Caliburn 来处理我的 ViewModel 中的方法,或者重定向到我从 ViewModel 公开的另一个命令?还是我以错误的方式解决这个问题?

0 投票
2 回答
5224 浏览

c# - 在 WPF 中,如何实现 ICommandSource 以使我的自定义控件能够使用来自 xaml 的命令?

您能否提供一个示例,说明您如何实现ICommandSource接口。因为我希望UserControl无法在 xaml 中指定命令的我的 具有这种能力。并且能够在用户单击CustomControl.

0 投票
1 回答
121 浏览

c# - 查找 RoutedEvent 的目的地

当我执行路由命令时,假设:

WPF 做了一些魔术来找到CommandBinding它在其上执行ExecutedRoutedEventHandler.

有没有办法获得对CommandBinding将要执行的(或至少是处理程序)的引用?

有时调试知道谁在处理命令会很好。

0 投票
2 回答
769 浏览

wpf - WPF Architecture Confusion RE:路由命令、事件和手势

在学习 WPF 时,我一直在阅读大量书籍和网站。似乎一直在逃避我的一件事是我们应该如何正确连接 RoutedCommands。在一篇文章中,作者指出 XAML 文件的代码隐藏应该只包含对 InitializeComponent 的调用。我可以落后。它使 XAML 文件只不过是一个演示文档,并满足了我对关注点分离的邪恶渴望。

另一方面,我看到的每个解决双击事件的示例似乎都希望您编写代码。我的理解是,我们希望避免在代码隐藏文件中出现重复代码(而且,我再次支持这一点),所以在我看来,这不是正确的做法。菜单命令、工具栏按钮单击等也是如此。

例如,想象一下我有一个打开文档的命令。该命令必须显示“打开”对话框,然后打开文档并将其缓存在应用程序状态中。(此应用程序一次只允许您处理一个文档。)用户可以通过以下任一方式调用此命令:

  • 从菜单中选择文件->打开。
  • 键入 Ctrl+O。
  • 单击工具栏上的打开按钮。

如果我信任 Web 上的大多数资源,我必须编写至少两个 Click 事件处理程序,然后调用该命令,从而污染代码隐藏文件。在我看来,这似乎违背了拥有命令的目的。我以为我在某处读到有一种方法可以在 XAML 中以声明方式将命令绑定到这些东西,它会为您完成,甚至在命令无法执行时禁用该命令。但现在我似乎找不到它,也找不到一个很好的例子来说明如何做到这一点。

有人可以向我解释一下吗?在这一点上,这一切都开始看起来像巫毒和弹片。

0 投票
2 回答
1637 浏览

mvvm - 任何与 RoutedCommand 配合得很好的 MVVM 框架?

RoutedCommand 和 RoutedUICommand 对他们有很大帮助。内置对文本和键盘手势的支持。您可以将 RoutedUICommands 集合绑定到菜单的 ItemsSource,它会自动为您创建和绑定菜单项。开箱即用的控件自动支持某些命令(剪切、复制、粘贴)。

然而,每当我使用 MVVM 时,我发现路由命令并不适合,因为重复的样板 XAML 和代码隐藏我必须为每个命令编写。当我在做 MVVM 时,我通常会使用RelayCommand而不是路由命令。这在某些时候是一个足够的解决方法,但它也有缺点——例如,按键手势变得更加复杂

但是在观看了 Rob Eisenberg 的“构建你自己的 MVVM 框架”课程之后,我不再对中继命令及其缺点感到满意。路由命令的唯一问题是重复的样板代码,一旦您将重复代码分解到框架中并应用约定,似乎不再有任何理由不在 MVVM 中使用路由命令。

从技术上讲,这看起来并不难。框架应该只需要绑定到视图的CommandManager.CanExecuteExecuted事件,并应用约定来查找 ViewModel 上的方法和属性——例如,当执行 Cut 命令时,查找 ExecuteCut 方法(和 CanExecuteCut 属性) 在 ViewModel 上。我可以构建自己的 MVVM 框架,让这一切变得简单。

但我的问题是,是否已经有与 RoutedCommand 一起使用的 MVVM 框架?我熟悉的唯一 MVVM 框架是 Caliburn.Micro,它目前不支持这种方式的路由命令(这让我感到惊讶,因为它确实支持自己的动作冒泡风格)。

0 投票
1 回答
154 浏览

wpf - WPF命令问题

为什么命令控制总是被禁用但是命令可以执行?命令也运行Alt + F4