winforms - DevExpress 中的 BarButtonItem 和 RibbonBarManager 点击事件

标签 winforms devexpress ribbon

我在使用 DevExpress 时遇到了一个问题,即:RibonControl 中的按钮。 我为RibonControl中按钮的方式编写了事件“click”,如下:

 private void barButtonClick_ItemClick(object sender, ItemClickEventArgs e)
 {
    BarButtonItem item = (BarButtonItem)(sender);
    //..... if else ...
 }

我在运行时收到错误消息:

Additional information: Unable to cast object of type 'DevExpress.XtraBars.Ribbon.RibbonBarManager' to type 'DevExpress.XtraBars.BarButtonItem'.

我认为,此错误是由于 DevExpress 中的按钮“单击”与 WPF 中的类似(路由事件)所致,对吗?以及如何解决?

最佳答案

以下是为您的任务查找正确的代码片段的方式:

void barButtonItem_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) {
    BarButtonItem bItem = e.Item as BarButtonItem;
    // ... do something
}

文档:ItemClickEventArgs.Item属性。

事实上,此事件处理程序中的 sender 参数是 BarManager 而不是 BarButtonItem,可以通过 DevExpress XtraBars Suite 架构进行解释。 主要思想是 BarItem 是一个无法“单击”的非可视元素。 BarItemLink 元素是指向此项目的链接,代表屏幕上的项目。 BarManager 实例管理所有与链接的交互,并将所有事件路由到相应项目和 BarManager 的事件处理程序。这就是为什么 BarManager/RibbonBarManager 实例在事件处理程序中显示为 sender 参数。

参见Items and Links了解更多详情。

关于winforms - DevExpress 中的 BarButtonItem 和 RibbonBarManager 点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25605462/

相关文章:

java - 第三方功能区组件与 Microsoft Ribbon UI 许可证?

c# - 按 Enter 键登录 WPF 窗口。

c# - 加载数据并在此期间显示启动画面

c# - 如何使用 SSL 通过套接字发送 json 消息

xaml - 如何在 XAML 文件的 mapControl 上为 ImageTilesLayer 提供自定义数据作为 DataProvider?

.net - 如何将数据绑定(bind)的持久对象保存到 DataLayoutControl(DevExpress 工具)?

c# - 在 C# 中与 Windows 服务对话的 Windows 应用程序?

css - DevExpress ASPxButton 不更新所有属性

WPF 如何控制 RibbonTab 的高度?

c# - 如何在功能区设计器中更改组的大小?