0

メソッドにカスタム確認ダイアログを実装しますOnBackKeyPress。ネイティブ メッセージ ボックスを使用するのは簡単です。

protected override void OnBackKeyPress(CancelEventArgs e)
{
  base.OnBackKeyPress(e);

  MessageBoxResult result = MessageBox.Show("Text");

  if(result==MessageBoxResult.OK)
  {
    e.Cancel = true;
  }
}

動作しますが、ボタンが 2 つの制限が嫌いなので、別のものを探しています。

私はWPtoolkitをチェックしました:

private bool m_cansel = false;
protected override void OnBackKeyPress(CancelEventArgs e)
{
  base.OnBackKeyPress(e);

  if (!m_cansel)
  {
    e.Cancel = true;
    m_cansel = true;
    var messageBox = new CustomMessageBox
      {
        Title = "Title",
        Message = "Message",
        RightButtonContent = "aas",
        IsLeftButtonEnabled = false,
      };
    messageBox.Dismissed += (sender, args) =>
      {
      };
    messageBox.Show();
  }
}

Coding4Fun:

private bool m_cansel = false;
protected override void OnBackKeyPress(CancelEventArgs e)
{
  base.OnBackKeyPress(e);

  if (!m_cansel)
  {
    e.Cancel = true;
    m_cansel = true;
    var messageBox = new MessagePrompt 
      {
        Title = "Title",
        Message = "Message",
      };
    messageBox.Completed += (sender, args) =>
      {
        //throw new NotImplementedException();
      };
    messageBox.Show();
}

どちらも良さそうに見えますが、メソッド内では機能しませんOnBackKeyPress(表示され、何もしなくてもすぐに消えます)。

さらに、私はXNAを試しました:

private bool m_cansel = false;
protected override void OnBackKeyPress(CancelEventArgs e)
{
  base.OnBackKeyPress(e);

  if (!m_cansel)
  {
    e.Cancel = true;
    m_cansel = true;
    Guide.BeginShowMessageBox("Version of Windows", "Pick a version of Windows.",
                              new List<string> {"Vista", "Seven"}, 0, MessageBoxIcon.Error,
                              asyncResult =>
                                {
                                  int? returned = Guide.EndShowMessageBox(asyncResult);
                                }, null);
  }
}

期待どおりに動作します (方法に慣習がありOnBackKeyPressます) が、Silverlight アプリ内で XNA を使用することが適切かどうかはわかりません。

そのため、メソッド内で WPtoolkit または Coding4Fun ウィンドウを使用するOnBackKeyPress方法、または Silverlight アプリ内で XNA を使用することに関する説明 (ストアによるそのような種類のアプリの承認に関する推奨事項または情報) を探しています。

4

1 に答える 1

2

ディスパッチャーを使用して、OnBackKeyPress イベントから抜け出すまでメッセージ ボックスを遅らせるだけで、動作するはずです。

private bool m_cansel = false;
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
{
    base.OnBackKeyPress(e);

    if (!m_cansel)
    {
        e.Cancel = true;
        m_cansel = true;
        var messageBox = new CustomMessageBox
            {
                Title = "Title",
                Message = "Message",
                RightButtonContent = "aas",
                IsLeftButtonEnabled = false,
            };
        messageBox.Dismissed += (sender, args) =>
            {
            };

        Dispatcher.BeginInvoke(messageBox.Show);
    }
}

または、OnBackKeyPress メソッドをオーバーライドする代わりに、BackKeyPress イベントを使用できます。この方法では、ディスパッチャーを使用する必要はありません。

privatevoid Page_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
{
    if (!m_cansel)
    {
        e.Cancel = true;
        m_cansel = true;
        var messageBox = new CustomMessageBox
        {
            Title = "Title",
            Message = "Message",
            RightButtonContent = "aas",
            IsLeftButtonEnabled = false,
        };
        messageBox.Dismissed += (s, args) =>
        {
        };

        messageBox.Show();
    }
}

XAML では次のようになります。

BackKeyPress="Page_BackKeyPress"
于 2013-09-14T10:49:26.890 に答える