从另一个页面调用堆栈布局



我正在使用c#创建一个Xamarin.Forms应用程序。

页面中有一个按钮,我想在单击按键时在Main Page中的StackLayout添加一个新的标签

我试图在XAML文件中设置StackLayoutpublicFieldModifier属性,但没有成功。。。

这是布局代码(我想将标签添加到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);
}
}
}

最新更新