0

私は小さなゲームタイプのアプリケーションを開発しています。ユーザーがゲームに勝つと、ポップアップが表示され、以下のコードを書きました。

  public void stoptimer()
 {

        if ((Convert.ToString(b1.Content) == "1") && (Convert.ToString(b2.Content) == "2") && (Convert.ToString(b3.Content) == "3") && (Convert.ToString(b4.Content) == "4") && (Convert.ToString(b5.Content) == "5") && (Convert.ToString(b6.Content) == "6") && (Convert.ToString(b7.Content) == "7") && (Convert.ToString(b8.Content) == "8") && (Convert.ToString(b9.Content) == "9") && (Convert.ToString(b10.Content) == "10") && (Convert.ToString(b11.Content) == "11") && (Convert.ToString(b12.Content) == "12") && (Convert.ToString(b13.Content) == "13") && (Convert.ToString(b14.Content) == "14") )

        {
            newTimer.Stop();
            time = txtClock.Text;
            //textBox2.Text = txtClock.Text;
            Popup buyNowScreen;
            buyNowScreen = new Popup();
            buyNowScreen.Child =
                new popupscreen
                    ();
            buyNowScreen.IsOpen = true;
            buyNowScreen.VerticalOffset = 100;
            buyNowScreen.HorizontalOffset = 25;

        }
      }

そして、ポップアップページから他のページに移動するための以下のコードを書きましたが、NullReferenceException を取得することはできません。

   private void button3_Click(object sender, RoutedEventArgs e)
    {

        ClosePopup();
        NavigationService.Navigate(new Uri("/Menu.xaml", UriKind.Relative));
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        ClosePopup();

        NavigationService.Navigate(new Uri("/NumericEasy.xaml", UriKind.Relative));

    }


    private void ClosePopup()
    {
        Popup buyPop = this.Parent as Popup;
        if (buyPop.IsOpen)
        {
            buyPop.IsOpen = false;


        }

    }
4

2 に答える 2

1

ナビゲーションサービスはページ間で機能するため、ポップアップをそれほど単純に使用することはできません。このサービスは、使用するページを見つけることができないため、例外をスローします。

問題を解決するには、次のようにする必要があります。

ポップアップクラス

1)ポップアップコンストラクタで、PhoneApplicationPageオブジェクトを取得する必要があります。

      private PhoneApplicationPage _page;

      public SomePopup(PhoneApplicationPage page)
            {
             _page = page;

2)クリックイベントの新しいタイプを作成する必要があります。

        public delegate void NavigateHandler(object sender, EventArgs e, PhoneApplicationPage page);

        public event NavigateHandler NavigateFromPopup;

3)button_clickイベントで、次のように呼び出す必要があります。

public void ButtonX_Click(object sender, RoutedEventArgs e)
        {
               if (NavigateFromPopup!= null)
                NavigateFromPopup(this, EventArgs.Empty, _page);
        }

あなたのページクラス

4)ページでポップアップを作成するときに、次のeventHandlerを追加する必要があります。

            SomePopup p = new SomePopup(this);
            p.NavigateFromPopup +=new SomePopup.NavigateHandler(p_NavigateFromPopup);

5)そして最後に、あなたのページでこのイベントを書き留めてください:

private void p_NavigateFromPopup(object sender, EventArgs e, PhoneApplicationPage page)
        {
            page.NavigationService.Navigate(new Uri("...", UriKind.RelativeOrAbsolute));
        }

それはうまくいくはずです。

于 2012-12-13T06:40:58.323 に答える
1

ポップアップ ページのコントロールにイベントを与える手順は次のとおりです。

    Popup buyNowScreen=new Popup();

    popupscreen popup1=new popscreen();
    buyNowScreen.Child =popup1;
    buyNowScreen.isOpen=true;
    popup1.button1.click+= new RoutedEventHandler(btn_playagain_click);
    private void btn_playagain_click(object sender, EventArgs e)
     {
        p.IsOpen = false;
        NavigationService.Navigate(new Uri("/NumericEasy.xaml?Refresh=true", UriKind.Relative));
    }
于 2012-12-17T06:01:38.230 に答える