1

我正在使用 DevExpress12.2 为 Windows 7 开发一个 MetroUI 喜欢的应用程序。但是,我面临一个似乎无法靠自己解决的问题。

我正在使用 DocumentManager 创建一个 Tile Container Page。因此,DevExpress 会自动为我们生成一个返回按钮。

用户可以随时单击返回按钮返回到磁贴菜单。但是,在某些情况下,比如数据录入,我们需要强制用户在用户完成操作之前不要返回?

当用户单击后退按钮时,我可以捕捉到任何事件吗?或者有什么方法可以在某些情况下隐藏后退按钮?

4

1 回答 1

1

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

换句话说,如果您需要取消“返回”操作,则根本不应该显示此操作(要删除“返回”导航元素,您应该清除特定容器的 Parent 属性)。

因此,为防止用户使用“返回”或“主页”导航操作停用页面内容容器,您不应将此页面内容容器包含到导航层次结构中,并使用 WindowsUIView.Controller 手动导航到此容器并从该容器返回方法和自定义按钮

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
    }
}
于 2013-03-14T12:27:00.917 回答