DevExpress WindowUIView返回按钮事件

本文关键字:事件 按钮 返回 WindowUIView DevExpress | 更新日期: 2023-09-27 18:03:46

我正在使用DevExpress12.2为Windows 7开发一个类似metro的应用程序。然而,我正面临着一个似乎无法独自解决的问题。

我正在使用DocumentManager创建一个Tile容器页面。因此,DevExpress将自动为我们生成一个返回按钮。

用户可以随时点击后退按钮返回平铺菜单。但是,在某些情况下,例如数据输入,我们需要强制用户不要返回,直到用户完成操作?

是否有任何事件,我可以抓住当用户点击后退按钮?或者在某些情况下,我是否有办法隐藏后退按钮?

DevExpress WindowUIView返回按钮事件

没有嵌入式功能来处理'后退'按钮点击,因为Windows UI导航概念不接受正在执行的操作或不基于这些操作已经显示后更改的条件的操作。所有的动作(导航栏动作和嵌入的动作,如'后退'按钮)都是基于它的CanExecute()方法实现来显示或不显示的。

换句话说,如果你需要取消"Back"操作,你不应该显示这个操作(要删除"Back"导航元素,你应该清除特定容器的Parent属性)。

因此,为了防止用户通过使用'Back'或'Home'导航操作来停用Page内容容器,您不应该将此Page内容容器包含在导航层次结构中,并且使用WindowsUIView手动导航到此容器并从此容器返回。控制器方法和自定义按钮:

WindowsUIButton customBackButton;
public Form1() {
    InitializeComponent();
    // add custom button on 'page1' container
    customBackButton = new DevExpress.XtraBars.Docking2010.WindowsUIButton();
    customBackButton.Caption = "Back to Main Tile Container";
    customBackButton.Image = ContentContainerAction.Back.Image;
    page1.Buttons.Add(customBackButton);
    page1.ButtonClick += Page_ButtonClick;
    tileContainer1.Click += TileContainer_Click;
}
void TileContainer_Click(object sender, TileClickEventArgs e) {
    page1.Document = ((Tile)e.Tile).Document;
    page1.Subtitle = ((Tile)e.Tile).Document.Caption;
    // handle 'tileContainer1' click to activate 'page1' manually
    e.Handled = windowsUIView1.Controller.Activate(page1); 
}
const string messageText = "Do you want to navigate back in Main Tile Container?";
void Page_ButtonClick(object sender, ButtonEventArgs e) {
    if(e.Button == customBackButton) {
        if(MessageBox.Show(messageText, "Back", MessageBoxButtons.YesNo) == DialogResult.Yes)
            windowsUIView1.Controller.Activate(tileContainer1); // activate container
    }
}