我正在使用c#创建一个Xamarin.Forms应用程序。
页面中有一个按钮,我想在单击按键时在Main Page
中的StackLayout添加一个新的标签。
我试图在XAML文件中设置StackLayout
public的FieldModifier
属性,但没有成功。。。
这是布局代码(我想将标签添加到MainStackLayout
中(和按钮点击的cs方法:
<ContentPage.Content>
<ScrollView>
<StackLayout BackgroundColor="white">
<StackLayout Orientation="Horizontal" x:Name="MainStackLayout" x:FieldModifier="public" >
</StackLayout>
<Button
Text="Add Counter"
BackgroundColor="darkgreen"
HorizontalOptions="FillAndExpand"
CornerRadius="0"
HeightRequest="80"
TextColor="white"
FontAttributes="Bold"
x:Name="AddCounter_btn"
Clicked="AddCounter_btn_Clicked"
>
</Button>
</StackLayout>
</ScrollView>
</ContentPage.Content>
private void StartCount_btn_Clicked(object sender,EventArgs e)
{
Label NCounterName =new Label();
NCounterName.Text = counter_txt.Text.ToString();
Label NCounterNumber = new Label();
NCounterNumber.Text = "0000";`enter code here`
}
假设您在Page1
中有一个按钮,即StartCount_btn
,当您单击该按钮时,您希望在Page2中为MainStackLayout
添加一些标签。
在Page1中,单击StartCount_btn
按钮时发送addLabelNotification
:
private void StartCount_btn_Clicked(object sender, EventArgs e)
{
MessagingCenter.Send<Object>(this, "addLabelNotification");
}
在Page2中,订阅消息并在收到消息时添加标签:
public partial class Page2 : ContentPage
{
public Page2()
{
InitializeComponent();
MessagingCenter.Subscribe<Object>(this, "addLabelNotification", (sender) =>
{
// Do something whenever the "addLabelNotification" message is received
Label NCounterName = new Label();
NCounterName.Text = "counter_txt";
Label NCounterNumber = new Label();
NCounterNumber.Text = "0000";
MainStackLayout.Children.Add(NCounterName);
MainStackLayout.Children.Add(NCounterNumber);
});
}
}
参考:信息中心
我在这里写了这段代码,无法检查,但它可以工作。您的按钮提供了足够的信息,可以访问任何视图。您只需使用父子控件。
private void StartCount_btn_Clicked(object sender,EventArgs e)
{
if(sender is Button myButton)
{
if(myButton.Parent is StackLayout myStackLayout)
{
Label NCounterName =new Label();
//set your label's text
myStackLayout.Add.Children(NCounterName);
}
}
}