更改MessageDialog内容或从MessageDialog处理程序Windows应用商店应用中显示新内容

时间:2014-02-16 00:38:42

标签: c# wpf xaml windows-8.1 win32exception

我有MessageDialog对话负责删除确认。

private async void ShowDialogClick(object sender, RoutedEventArgs e)
{
    MessageDialog md = new MessageDialog("Are your sure you want to delete this?");

    md.Commands.Add(new UICommand("Delete",
        new UICommandInvokedHandler(DeleteItemHandler)));
    md.Commands.Add(new UICommand("Cancel"));

    await md.ShowAsync();
}

当用户点击Delete时,DeleteItemHandler会调用数据库上的操作,但如何通知用户操作失败?

我尝试创建新的MessageDialog,但我得到win32 exception

private async void DeleteItemHandler(IUICommand command)
{
    MessageDialog md = new MessageDialog("New content");

    String result = DbDeletation();

    if(result != "OK")
        await md.ShowAsync();
}

告知用户有关错误的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您无法自定义MessageDialos并将它们连续调用,因此,您有两种方法:

  1. 使用命令构建自己的Popup控件,并且在操作返回结果之前不要关闭弹出窗口。显示进度或类似的东西。如果发生错误 - 在弹出窗口中显示。

  2. 使用MessageDialog并在您调用MessageDialog的地方(例如,在按钮Delete附近)显示progess和错误消息(如果有)。

  3. 第二种方法更适合Windows Store App guidelines

答案 1 :(得分:0)

根据Windows Store App guidelines MessagegDialog并不是确认删除的好方法。

  

当应用需要确认用户对用户采取的操作的意图时,弹出窗口是适当的表面。参见弹出窗口指南。

现在我的代码更清晰......

    private async void DeleteItem_Click(object sender, RoutedEventArgs e)
    {
        MessageDialog md = new MessageDialog("Error");

        String result = DbDeletation();

        if (result != "OK")
            await md.ShowAsync();
    }

更温和的解决方案:)

    <Button HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Content="Show Dialog">
        <Button.Flyout>
            <Flyout>
                <StackPanel>
                    <TextBlock>Are your sure you want to delte this?</TextBlock>
                    <Button Click="DeleteItem_Click"
                            Content="Delete"
                            HorizontalAlignment="Right"/>
                </StackPanel>
            </Flyout>
        </Button.Flyout>
    </Button>