如何在我的XAML代码中将C#中的标签添加到网格中?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在我的XAML代码中将C#中的标签添加到网格中?相关的知识,希望对你有一定的参考价值。
我有这个模板:
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Japanese.Templates.PointReductionModeTemplate" x:Name="this">
<StackLayout BackgroundColor="#FFFFFF" Padding="20,0" HeightRequest="49" Margin="0">
<Grid VerticalOptions="CenterAndExpand" x:Name="ABC">
</Grid>
</StackLayout>
</ContentView>
如何使用此文本和样式将此标签添加到C#中的Grid?请注意,我希望能够引用Source={x:Reference this}
<Label Text="{Binding Text, Source={x:Reference this}}" Style="{StaticResource LabelText}" />
答案
您可以使用SetBinding()
创建绑定,同时使用parent(this)作为绑定源。明确指定source参数告诉Binding
将该实例引用为Source
。
//<Label Text="{Binding Text, Source={x:Reference this}}" ...
var label = new Label();
label.SetBinding(Label.TextProperty, new Binding(nameof(Text), source: this));
现在从资源动态设置Style
并不是那么简单。当我们在XAML中使用StaticResource
扩展时,它负责走向可视树以找到匹配的资源(样式)。在代码隐藏中,您必须手动定义确切的资源字典,其中定义了样式。
因此,假设您在App.xaml中定义了“LabelText” - 您可以使用以下代码:
//... Style="{StaticResource LabelText}" />
//if the style has been defined in the App resources
var resourceKey = "LabelText";
// resource-dictionary that has the style
var resources = Application.Current.Resources;
if (resources.TryGetValue(resourceKey, out object resource))
label.Style = resource as Style;
如果样式在PointReductionModeTemplate.xaml(或ContentView
资源)中定义,您可以使用:
var resources = this.Resources;
if (resources.TryGetValue(resourceKey, out object resource))
label.Style = resource as Style;
最后将标签添加到网格中。
this.ABC.Children.Add(label);
另一答案
您应该创建label类的对象,然后将此对象添加到网格的Chidlers属性中。
Label dynamicLabel = new Label();
dynamicLabel.Name = "NewLabel";
dynamicLabel.Content = "TEST";
dynamicLabel.Width = 240;
dynamicLabel.Height = 30;
dynamicLabel.Margin = new Thickness(0, 21, 0, 0);
dynamicLabel.Foreground = new SolidColorBrush(Colors.White);
dynamicLabel.Background = new SolidColorBrush(Colors.Black);
Grid.SetRow(dynamicLabel, 1);
Grid.SetColumn(dynamicLabel, 0);
gride.Children.Add(dynamicLabel);
另一答案
你可以试试这个
Grid grid = new Grid();
grid.SetBinding(Grid.BindingContextProperty, "Source");
Label label = new Label();
label.SetBinding(Label.TextProperty,FieldName);
Resources.Add ("label", customButtonStyle);
grid.Children.Add(label)
要在Label
中添加Grid
,请提供您的首选位置。只需示例代码就可以编程设置Label
上的绑定
label.BindingContext = list; // The observablecollection
label.SetBinding(Label.TextProperty, "Count");
Styles programatically&Binding programatically
希望它对你有所帮助。
以上是关于如何在我的XAML代码中将C#中的标签添加到网格中?的主要内容,如果未能解决你的问题,请参考以下文章