Xamarin.Forms无法更改动态生成的控件

时间:2018-06-03 14:23:31

标签: c# dynamic xamarin.forms

我目前正在开发一个应用程序,其中控件是在代码后面动态生成的。

示例代码:

private void MakeDynamicLabelControl(JObject jsonData)
    {
        Label dynamicLabel = new Label();
        dynamicLabel.BackgroundColor = Color.White;
        dynamicLabel.Margin= new Thickness(20, 0, 20, 0);

        if (!string.IsNullOrEmpty( jsonData["Content"].ToString()))
        {
            dynamicLabel.Text = jsonData["Content"].ToString();
            stcMainPanel.Children.Add(dynamicLabel);
        }
    }

这些应用程序中还有其他一些类似的方法用于其他控件。 (例如。图像,网格,webview,......) 这些方法可以多次使用。所以我不能公开生成的控件,因为它只会影响最后生成的项。 (覆盖公共变量)

调整屏幕大小或旋转时,需要更改所有控件以使页面更具屏幕响应性。 (例如。更改labal.Margin属性)目前我使用PageName_SizeChange eventHandler来更改某些控件,它适用于xaml中的控件,因为xaml中的控件具有name属性。但是在后面的代码中创建的控件不能有名称,只能设置它。

如何更改后面代码中生成的控件的属性?

如何使生成的控件适合屏幕大小?

我只想在调整UWP窗口大小或将手机更改为横向模式时为生成的控件增加一些余量。这样,控件看起来不会拉长,文本也更容易阅读。

我努力实现的目标:

     private void MainPage_SizeChanged(object sender, EventArgs e)
                {
            if (this.Width<= this.Height)
                        {
                            Debug.WriteLine("PORTRAIT mode");


                            if (paginaBreedte < 520)
                            {
                                // Works for controls in Xaml
                                lblControlInXaml.Margin = new Thickness(20,0,20,0);
                                lblControlInXaml.Text="TinyPortrait";

                                // I don't know how to change properties of dynamic controls 
                               //however they need to be changed as well (screen responsive)

// <Dynamic generated control>.Margin = new Thickness(50,0,50,0);
// <Dynamic generated control 2>.Text= " In portrait"
// <All generated controls (could be other things than labels>.Margin = new Thickness(50,0,50,0);
                            }
                            else
                            {
                                lblControlInXaml.Margin = new Thickness(20,0,20,0);

                                lblControlInXaml.Text="BigPortraitPossibleTablet";

//I want to changed the code behind controls as well
                            }
                        }
                        else{
                             Debug.WriteLine("landscape")
//change all generated controls in code behind
                            }
                   }

0 个答案:

没有答案