MessageDialog关闭Popup

时间:2012-11-10 16:24:53

标签: windows-8 popup microsoft-metro windows-store-apps messagedialog

在我的弹出窗口窗口(包含游戏选项控件)中,我有“重置HighScores”按钮。按钮使用TextBlock激活 MessageDialog “你确定...”和两个按钮“是”和“否”。但是,当MessageDialog打开时,Popup会关闭。你知道怎么让popup还活着吗?

2 个答案:

答案 0 :(得分:4)

我可以使用Action委托作为MessageDialog关闭时的回调来解决这个问题。

关键是在await函数的MessageDialog ShowAsync async之后调用操作。

另一个关键是关闭并打开弹出窗口以使IsLightDismissEnabled实际占用。

XAML:

<Popup
    IsLightDismissEnabled="{Binding IsLightDismiss, Mode=TwoWay}"
    IsOpen="{Binding IsPopupOpen, Mode=TwoWay}">

视图模型:

private bool isPopupOpen;
public bool IsPopupOpen
{
    get { return this.isPopupOpen; }
    set { this.SetProperty(ref this.isPopupOpen, value); }
}

private bool isLightDismiss;
public bool IsLightDismiss
{
    get { return this.isLightDismiss; }
    set { this.SetProperty(ref this.isLightDismiss, value); }
}

protected void ShowDialog()
{
    this.IsLightDismiss = false;
    this.IsPopupOpen = false;
    this.IsPopupOpen = true;
    Action showPopup = () => {
        this.IsLightDismiss = true;
        this.IsPopupOpen = false;
        this.IsPopupOpen = true;
    };
    ShowMessageDialog("message", "title", showPopup);
}
private async void ShowMessageDialog(string message, string title, Action callback)
{
    var _messageDialog = new MessageDialog(message, title);
    await _messageDialog.ShowAsync();
    callback();
}

答案 1 :(得分:1)

Popup的{​​{1}}属性设置为IsLightDismissEnabled即可实现此目标。

false