0

Windowsフォンで動的制御のページを作成したい。これをしながら、プログレスバーも表示したい

以下は私のコードです

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    progressstackPanel.Visibility = Visibility.Visible;//progress bar
    formScreen = this;

    Deployment.Current.Dispatcher.BeginInvoke(() =>
    {
        if (!isfst)
        {
             DrawScreen();
        }
        else
        {
            //xTitlePanel is only stack panel in my xaml with vertical orientation
            xTitlePanel.UpdateLayout();
        }
        isfst = true;
        progressstackPanel.Visibility = Visibility.Collapsed;
    });
}

//Code of DrawScreen which is adding control to my stack panels    
private void DrawScreen()
{
     if (frm_getset.ChildList != null)
     {
          String[] arr = frm_getset.ChildList.Split(',');

          xTitlePanel.Children.Clear();

          PrepareControls prepcontrol = new PrepareControls();

          foreach (AttributeGetSet a in _Attribute)
          {
              //this will return a stackpanel containing 
              // button/textbox etc.depending on a
              StackPanel sp = prepcontrol.getControl(i, a.Label, a, formScreen);
              try
              {
                   xTitlePanel.Children.Add(sp);

                   ///Here I get a eception only one control is added first one
                   /// for anyone it is getting a exception Argument    
               }
               catch(Exception ex)
               {
                    Console.WriteLine(ex.Message);
               }

               i += 1;
           }

システムは1つのコントロールのみを追加しており、実行しようとするxTitlePanel.Children.Add(sp);と例外が発生します。

4

1 に答える 1

0

問題を解決しました。「xTitlePanel」はStackPanelXAMLで作成したものです。Dispatcherからxamlで作成されたコントロールに複数の要素を追加できないことがわかりました。そのように。そのため、ローカルスタックを作成し、そのローカルスタックパネルにコントロールを追加する必要があります。完了したら、ローカルスタックパネルをxTitlePanelに追加します。今私のコードは以下のようになります

filteredList = new List<FormGetSet>();
            if (frm_getset.ChildList != null)
            {
                String[] arr = frm_getset.ChildList.Split(',');

                foreach (String x in arr)
                {
                    filteredList.Add(_template.list_fromgetset.Where(p => p.FormID.Contains(x.Trim())).ToList()[0]);
                }
            }
            xTbox_FormNameHeader.Text = frm_getset.NAME;
            _Attribute = new List<AttributeGetSet>();
            _Attribute = frm_getset.list_attributegetset;

            xTitlePanel.Children.Clear();

            StackPanel spPanel = new StackPanel();
            spPanel.Orientation = System.Windows.Controls.Orientation.Vertical;
            spPanel.Background = new SolidColorBrush(Colors.Transparent);
            //xTitlePanel.Children.Add(PrepareControls.getControl(1, "LABEL", "16"));
            int i = 1;
           // List<AttributeGetSet> _Attribute2 = new List<AttributeGetSet>();
            foreach (AttributeGetSet a in _Attribute)
            {
                PrepareControls prepcontrol = new PrepareControls();
                StackPanel sp=  prepcontrol.getControl(i, a.Label, a, this);
                try
                {
                    spPanel.Children.Add(sp);
                }
                catch(Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                //xTitlePanel.Background = new SolidColorBrush(Colors.White);
                //_Attribute2.Add(a);
                i += 1;
            }
         xTitlePanel.Children.Add(spPanel);
于 2013-03-19T12:48:53.400 に答える