RoutedCommands 已执行和预览执行事件

2023-11-24

我的问题是我想在多个地方处理命令。例如,我有自定义用户控件,其中按钮绑定到某个命令。我在该控件中有一个命令绑定,但在使用该控件的窗口中也有一个命令绑定。

我的目标是在控件内执行某些操作,同时不中断窗口中命令的处理。

我尝试尝试执行和预览执行事件,但没有成功。然后我在一个窗口中模拟了该问题(代码如下)。

<Window x:Class="CommandingEvents.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:CommandingEvents="clr-namespace:CommandingEvents" 
    Title="Window1" Height="300" Width="300">
<Window.CommandBindings>
    <CommandBinding 
        Command="{x:Static CommandingEvents:Window1.Connect}"
        Executed="CommandBindingWindow_Executed"
        PreviewExecuted="CommandBindingWindow_PreviewExecuted"/>
</Window.CommandBindings>
<Grid>
    <Grid.CommandBindings>
        <CommandBinding 
        Command="{x:Static CommandingEvents:Window1.Connect}"
        Executed="CommandBindingGrid_Executed"
        PreviewExecuted="CommandBindingGrid_PreviewExecuted" />
    </Grid.CommandBindings>
    <Button Command="{x:Static CommandingEvents:Window1.Connect}" 
            CommandTarget="{Binding RelativeSource={RelativeSource Self}}"
            Content="Test" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>

namespace CommandingEvents
{
    public partial class Window1
    {
        public static readonly RoutedUICommand Connect = new
            RoutedUICommand("Connect", "Connect", typeof(Window1));

        public Window1()
        {
            InitializeComponent();
        }

        private void CommandBindingWindow_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            Console.WriteLine("CommandBindingWindow_Executed");
            e.Handled = false;
        }

        private void CommandBindingGrid_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            Console.WriteLine("CommandBindingGrid_Executed");
            e.Handled = false;
        }

        private void CommandBindingWindow_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            Console.WriteLine("CommandBindingWindow_PreviewExecuted");
            e.Handled = false;
        }

        private void CommandBindingGrid_PreviewExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            Console.WriteLine("CommandBindingGrid_PreviewExecuted");
            e.Handled = false;
        }
    }
}

当我点击按钮时,仅打印出“CommandBindingWindow_PreviewExecuted”。这是为什么?我尝试将 e.Handled 设置为 false,但没有什么区别。谁能解释这种行为?


我不知道为什么会发生这种情况(以及它如何不是一个错误),但这是在WPF wiki:

有一个特殊性是关于 CommandBinding 这是非常 有趣且重要的是要知道。

CommandManager 使用路由事件 通知不同的CommandBinding 命令执行的对象 调用(通过默认手势, 输入绑定、显式等)。

到目前为止,这还算 直截了当。然而,更重要的是 重要的是 CommandBinding 将 标记路由事件 CommandManager 一旦处理 处理程序被执行(或者 预览已执行或已执行)。

最后,即使你的处理者有一个 与委托匹配的原型 称为 ExecutedRoatedEventHandler, 从 CommandBinding 执行的事件 不是 RoutedEvent 而是普通的 CLR 事件。设置或保留 e.Handled flag为false将会改变 没有什么。

因此,一旦执行或 PreviewExecuted 处理程序被调用, RoutedCommand 将停止其 路由。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RoutedCommands 已执行和预览执行事件 的相关文章

  • WPF 组合框如果只有 1 项则自动选择

    我有一个组合框 我绑定到一个可观察的集合 它会发生变化 根据选择的公司 并且大量公司将有一个帐户 项目 因此我想知道制作组合框的最佳方法是什么如果 ItemsSource 中只有 1 个项目 则设置 SelectedItem 否则将其保留为
  • 如何将 ObservableCollection 绑定到 AvalonDock DocumentPaneGroup?

    我需要在 AvalonDock 2 0 中加载项目集合作为文档 这些对象继承自一个抽象类 我想根据哪个子类在文档中渲染一个框架 这是我的 XAML
  • 转换BitmapImage后内存未释放

    我遇到以下 C 测试 代码的问题 public static void TestBitmap2ByteArray BitmapImage bitmap JpegBitmapEncoder encoder new JpegBitmapEnco
  • 我可以禁用特定控件的键盘输入吗?

    是否可以禁用控件的键盘输入 例如一个ListView 我怎么做 我尝试过覆盖KeyUp KeyDown事件 但显然不是这样的 IsEnabled是一个很好的解决方案 但是我只想禁用键盘交互并保持鼠标交互不变 处理KeyDown事件来得太晚了
  • 将 WPF 快捷键绑定到 ViewModel 中的命令

    我有一个使用 MVVM 模式的 WPF 应用程序 将按钮连接到 VM 非常简单 因为它们实现了 ICommand 我有一个工作原理类似的上下文菜单 下一步是为上下文菜单创建快捷键 我不知道如何让快捷键调用命令 这是一个例子
  • 获取代码中的绑定结果

    我可能正在以错误的方式寻找这个 但是 有没有办法通过代码获取绑定的结果值 可能是一些显而易见的东西 但我就是找不到它 您只需致电ProvideValue的绑定方法 困难的部分是你需要通过有效的IServiceProvider到方法 编辑 实
  • 列表视图上的 TextBlock:如何忽略 TextBlock 中的点击并让列表视图处理它们

    我有一个显示大量信息的列表视图 但是当它为空时 我想在其上覆盖一个文本块 上面写着 没有要显示的信息 或 bla bla bla 添加信息 列表视图设置为响应鼠标单击 但现在如果我单击文本块 这些事件将路由到文本块 我怎样才能让这些事件转到
  • 窗口关闭后仍在调用方法

    首先我不知道这是不是一个愚蠢的问题 我有这样的场景 首先我有一个主窗口 public MainWindow InitializeComponent dt is a System Windows Threading DispatcherTim
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 将 PDF 嵌入到 WPF 应用程序中

    我正在尝试在 WPF 应用程序中嵌入 显示 PDF 到目前为止 我已经尝试过这些解决方案 但没有成功 在 a 中显示 PDFWindowsFormsHost主持一个AxAcroPdf控制 类似于显示的内容here http hugeonio
  • ListView ItemContainerStyle 模板

    我创建了用作 ListView 项目模板的样式 其中包含 CheckBox 和 TextBlock
  • 如何从代码隐藏访问ListBox动态创建的项目的属性?

    XAML
  • 如何使 WPF 应用程序在 Web 浏览器上运行

    我们有一个用 WPF 编写的现有应用程序 我们正在寻找一种迁移它的方法 以便它可以在 Web 浏览器上运行 深入研究后 我们似乎需要找到一种将代码编译为 WebAssembly 的方法 但我不确定它对于现有的完全加载的 WPF 应用程序有多
  • 先学Silverlight还是先学WPF?

    看来 Silverlight WPF 是 NET 用户界面开发的长期未来 这很棒 因为我可以看到在客户端和 Web 开发端重用 XAML 技能的优势 但看看 WPF XAML Silverlight 它们似乎是非常庞大的技术 那么从哪里开始
  • WPF - 如何从 DataGridRow 获取单元格?

    我有一个具有交替行背景颜色的数据绑定 DataGrid 我想根据单元格包含的数据对单元格进行不同的着色 我已经尝试过该线程建议的解决方案 http wpf codeplex com Thread View aspx ThreadId 511
  • WPF 绑定 CompositeCollection 中的 MenuItem 不起作用

    我在将命令绑定到复合集合中的菜单项时遇到问题 这MenuItem是其一部分ContextMenu这是定义在UserControl Resources 问题是新标签的绑定不起作用 当我将 MenuItem 放置在复合集合之外时 它将起作用 有
  • PreviewKeyDown 不会在 ElementHost 中针对 Tab 和箭头键触发

    我在 Winforms ElementHost 中有一个 WPF 窗口 我的窗口上的 Tab 键和箭头键不会触发 KeyDown 和 PreviewKeyDown 事件 KeyUp 和 PreviewKeyUp 似乎工作正常 Preview
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标

随机推荐

  • C++ 链接器运行时缺少库(SONAME 行为)

    我制作了一个使用两个共享库 我编译的 的程序 并且放置如下 home directory where I compile and run everything gt lib libjson linux gcc 4 4 6 libmt so
  • 在 XAML 中对 DataGrid 进行排序时未反映 ColumnHeader 箭头

    我有一个 DataGrid 在 XAML 中定义了一些排序 如下所示
  • ID、唯一 ID、客户端 ID、唯一客户端 ID、静态客户端 ID?

    好吧 我对动态创建的控件的 ID 很困惑 Public Class TestClass Inherits Panel Implements INamingContainer Function TestClassInit Handles Me
  • Java 将接口转换为类

    我有一个关于接口和类实现接口的问题 这是我的代码 interface iMyInterface public iMethod1 public class cMyClass implements iMyInterface public iMe
  • 如果 APNS 设备令牌过期会发生什么?

    根据这个论坛帖子APNS 设备令牌创建后是否会更改 设备令牌可能已过期 或者 APNS 可能会更改设备令牌 我的问题是 如果服务器将这个过期的令牌发送给Apple APNS是否会使用过期的令牌进行通知 APNS 可以将此过期令牌用于其他设备
  • 为什么 (![]+[])[+!![]+[]] 产生“a”

    我有兴趣了解其内部结构JavaScript 我尝试阅读源代码蜘蛛猴 and Rhino但这是相当复杂的 我问的原因是 为什么会发生类似的事情 生产 a 生产alert 1 Source http sla ckers org forum re
  • C# 中抽象类的构造函数

    为什么可以在 C 中为抽象类编写构造函数 据我所知 我们无法实例化抽象类 那么它的用途是什么 你不能实例化这个类 对吗 因为您可能想要在抽象类中实例化数据的标准方法 这样 您就可以让从该类继承的类调用基本构造函数 public abstra
  • jquery - 对除单击的元素之外的每个元素运行函数

    作为一些示例代码 我可能有这样的东西 a parent click function a parent each function this stop true false animate width 140px 200 function
  • 内联变量如何工作?

    在 2016 年奥卢 ISO C 标准会议上 一项名为内联变量被标准委员会投票纳入C 17 通俗地说 什么是内联变量 它们如何工作以及它们有什么用 内联变量应该如何声明 定义和使用 提案第一句话 The inline说明符可以应用于变量以及
  • 在 docker 的构建阶段使用 github 私有仓库部署密钥进行 npm 安装

    我的用例是 我有多个使用相同中间件的 Express 微服务 我想为每个中间件以 npm 模块的格式创建不同的存储库 每个存储库都是私有存储库 并且可以附加部署密钥 可以是不同的密钥或相同的密钥 所有这些在本地都可以正常工作 但是 当我尝试
  • Typo3 V6:如何创建内容元素容器? (不带电视)

    对于一个项目 我使用 Typo3 v6 0 我正在寻找创建嵌套内容元素或内容元素容器 我希望能够创建内联两列布局 而不需要使用特定的模板 我想做这个without使用Templavoila 我尝试过的扩展是gridelements kb n
  • 如何在 Win32 桌面应用程序中使用自定义 WinRT 库?

    我的基于 Win32 的桌面应用程序中有一个 WinRT 类 C CX 引用类 它访问 WinRT API 并且工作得很好 我用了本指南让它发挥作用 现在我试图将此类放入桌面应用程序可以使用的库中 我在这方面遇到了一些麻烦 这是我在 Vis
  • 如何使用 ctypes.util.find_library 在 AWS lambda (python) 中导入 .so 库?

    我正在尝试什么 我在 Lambda 上使用的 python 包 OCRMYPDF 需要 leptonica 库libpt so 5 在隔离导入代码时 我发现问题在于find library lept 打印结果返回 None from cty
  • 将13位unixtime(以ms为单位)转换为python中的时间戳

    我想将以毫秒为单位的 13 位 Unix 时间转换为时间戳 1523126888080 gt gt Y m d H M S 我已经尝试过以下代码link 但我认为这是 10 位 Unix 时间 而我有 13 位 Unix 时间 所以 这段代
  • R:按值排除子集的 Data.table

    Using data table in R 我正在尝试对子集进行操作排除选定的元素 我正在使用by运算符 但我不知道这是否是正确的方法 这是一个例子 例如 的价值Delta in IAH SNA是 3 3 2 的平均值Stops in IA
  • 从 IntPtr(16 位)数组复制到托管 ushort

    我有一个IntPtr称为rawbits 它指向一个10MB的数据数组 16位值 我需要返回一个托管的ushort数组由此而来 下面的代码可以工作 但有一个额外的BlockCopy我想摆脱 Marshal Copy不支持ushort 我能做些
  • 使用矩阵中的行索引和列索引从矩阵中提取值

    我有一个矩阵 A 看起来像 A matrix 1 9 3 3 A 1 2 3 1 1 4 7 2 2 5 8 3 3 6 9 以及我感兴趣的元素索引矩阵 第 1 列包含行索引 第 2 列包含列索引 v matrix c 1 3 2 2 2
  • 如何在java程序中使用mkdir和rmdir命令

    我想使用系统命令 例如mkdir and rmdir运行java程序时 我怎样才能做到这一点 为什么要使用命令行 仅供参考 有内置的独立于平台的File类 http www exampledepot com egs java io dele
  • 以固定速率安排 Callable

    我有一个任务想要以固定速率运行 但是我还需要每次执行后任务的结果 这是我尝试过的 The task class ScheduledWork implements Callable
  • RoutedCommands 已执行和预览执行事件

    我的问题是我想在多个地方处理命令 例如 我有自定义用户控件 其中按钮绑定到某个命令 我在该控件中有一个命令绑定 但在使用该控件的窗口中也有一个命令绑定 我的目标是在控件内执行某些操作 同时不中断窗口中命令的处理 我尝试尝试执行和预览执行事件