0

電話アプリケーションページに表示されるリストピッカーがあります。クラスの開始時にリストピッカーを作成し、phoneApplicationPage_loaded()メソッドにリストピッカーを追加しています。ページを初めて起動したときのシナリオ完全に機能し、さらに2ページ目に移動します。前のページ(リストピッカーを含む)に戻ると、「要素はすでに別の要素の子です」という無効な操作例外が発生したことが示されます。

これらのシナリオを処理する方法を知りたいですか?

コードは以下のとおりです

名前空間My.Design{パブリック部分クラスmyclass:PhoneApplicationPage {

    String[] values = null;
    ListPicker picker = new ListPicker();
    StackPanel sp;
    StackPanel mainFrame;
    String statementInfo = "";

    public myclass()
    {
        InitializeComponent();  
    }

    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        Debug.WriteLine("Phone Application Page Loaded_>>>>>>");
        List<String> source = new List<String>(); 
        displayUI();                   

    }

    public void displayUI()
    {
        Debug.WriteLine("About to display UI in miniStatement");
        Debug.WriteLine("<-------------Data--------->");
        Debug.WriteLine(statementInfo);
        Debug.WriteLine("<-------------Data--------->");
        int count = VisualTreeHelper.GetChildrenCount(this);
        if (count > 0)
        {
            for (int i = 0; i < count; i++)
            {
                UIElement child = (UIElement)VisualTreeHelper.GetChild(this, i);
                string childTypeName = child.GetType().ToString();
                Debug.WriteLine("Elements in this Child" + childTypeName);
            }
        }
        List<String> source = new List<String>();

        String[] allParams = ItemString.Split('@');
        source.Add("PleaseSelect");
        for (int i = 0; i < allParams.Length; i++)
        {
            Debug.WriteLine("All Params Length" + allParams[i]);
            if (!(allParams[i].Equals("") && (!allParams[i].Equals(null))))
            {
                if (values != null)
                {
                    Debug.WriteLine("Values length" + values.Length);
                    values[values.Length] = allParams[i];
                }
                else
                {
                    Debug.WriteLine("Allparams Length" + allParams[i]);
                    source.Add(allParams[i]);
                }

            }

        }
        //picker = new ListPicker();
        this.picker.ItemsSource = source;

        mainFrame = new StackPanel();
        TextBlock box = new TextBlock();
        box.Text = "> DEmoClass";
        box.FontSize = 40;

        mainFrame.Children.Add(box);
        Canvas canvas = new Canvas();
        StackPanel sp = new StackPanel();
        TextBlock box1 = new TextBlock();
        box1.Text = "Number";
        box1.HorizontalAlignment = HorizontalAlignment.Center;
        box1.FontSize = 40;
        SolidColorBrush scb1 = new SolidColorBrush(Colors.Black);
        box1.Foreground = scb1;
        sp.Children.Add(box1);
        picker.Width = 400;
        picker.Height = 150;
        sp.Children.Add(picker);
        Canvas.SetTop(sp, 150);
        canvas.Children.Add(sp);
        mainFrame.Children.Add(canvas);
        this.ContentPanel1.Children.Add(mainFrame);
    }
    protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
    {
        /*
        Debug.WriteLine("OnNavigatingFrom>>>.>>MainPage");
        if (sp != null)
        {
            sp.Children.Remove(picker);
        }*/
        base.OnNavigatingFrom(e);
    }

}

}

4

3 に答える 3

1

2 ページ目から戻った後に listpicker を更新するつもりがない場合は、Loaded イベント ハンドラーに次の行を追加します。

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    this.Loaded -= PhoneApplicationPage_Loaded;
    Debug.WriteLine("Phone Application Page Loaded_>>>>>>");
    List<String> source = new List<String>(); 
    displayUI();                   

}
于 2012-10-15T06:25:25.860 に答える
0

コードで作成し、XAML に残さないのはなぜですか? また、おそらく単一のコンテンツ要素しか持てない場所に2回追加しようとしているという事実から、エラーが発生しています。あなたが解決しようとしているより高いレベルの問題は何ですか?

于 2012-10-17T05:19:34.553 に答える
0

アプリが墓石から再開するときにそのケースを使用できない理由がわかりません。

ページに戻ると、ロードされたイベントが再度実行されるため、エラーが発生しました。

ところで、

Application_Activated の引数は、アプリが廃棄済みかどうかを示すことができます。

if (e.IsApplicationInstancePreserved)
{

   IsTombstoning = false;    

}
その他
{

   IsTombstoning = true;    

}

于 2012-10-15T07:53:54.453 に答える