我目前正在开发一个应用程序,其中控件是在代码后面动态生成的。
示例代码:
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
}
}