Xamarin,标签页点击与按钮页点击有什么区别?

时间:2019-07-03 19:15:51

标签: xamarin xamarin.forms xamarin.android xamarin.ios

当我单击选项卡页面()时,会出现一个新的设置页面,但未填充我已经输入的信息,但我单击了一个按钮(Navigation.PushModalAsync(new SettingsPage());),该页面随之出现上,并在其中填入我输入的信息。两者之间有区别吗?

//for tab page
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
        xmlns:local="clr-namespace:Bldg"
        x:Class="Bldg.HomePage" >

<local:HistoryLogPage Title="Log"/>
<local:AddDrainsPage Title="Add"/>
<local:SettingsPage Title="Edit Settings"/> 

<Label x:Name="drain1Label" />

</TabbedPage>

//for click button
void NextpageButton_Clicked(object sender, System.EventArgs e)
{ 
Navigation.PushModalAsync(new SettingsPage());
}

//SettingsPage

namespace Bldg
{
public partial class SettingsPage : ContentPage
{

public static string item, username;
public static string location1, location2;
bool is1Empty = string.IsNullOrEmpty(Settings.n1LocationSettings);
bool is2Empty = string.IsNullOrEmpty(Settings.n2LocationSettings);

List<string> list;

public SettingsPage()
{

InitializeComponent();
drainquantity();

list = new List<string>();
    list.Add("1");
    list.Add("2");

locationPicker1.SelectedIndexChanged += drain1Handle_SelectedIndexChanged;
locationPicker2.SelectedIndexChanged += drain2Handle_SelectedIndexChanged;

//nameofpickerinxamlfile.On<iOS().SetUpdateMode(UpdateMode.WhenFinished);


locationPicker1.On<iOS>().SetUpdateMode(UpdateMode.WhenFinished);
locationPicker2.On<iOS>().SetUpdateMode(UpdateMode.WhenFinished);

drainxPicker.SelectedItem = Settings.DrainquantitySettings;
locationPicker1.SelectedItem = Settings.n1LocationSettings;
locationPicker2.SelectedItem = Settings.n2LocationSettings;

nameEntry.Text = Settings.NameSettings;

clearButton.IsVisible = false;

drainlocationPicker2.IsEnabled = false;

drainxPicker.SelectedItem = Settings.DrainquantitySettings;
}

//this is fired when user changes or selects new selection
void drainxHandle_SelectedIndexChanged(object sender, System.EventArgs e)
{
//to get the value of user selected going to be use in switch; then save in a 
variable
var drainx = drainxPicker.Items[drainxPicker.SelectedIndex];

item = (string)drainxPicker.SelectedItem;


bool isdrainxEmpty = string.IsNullOrEmpty(Settings.DrainquantitySettings);

if (isdrainxEmpty == true)
{

//switch for user selected in drainpicker

switch (drainx)
{               
case "1":
n1Gridrow.IsVisible = true;
locationPicker1.IsVisible = true;
n2Gridrow.IsVisible = false;

if (is1Empty == true)
{
drainxPicker.IsEnabled = true;
}
else
drainxPicker.IsEnabled = false;

break;

case "2":
n1Gridrow.IsVisible = true;
n2Gridrow.IsVisible = true;
locationPicker2.IsEnabled = false;

break;

}  //switch end
}
else
{
drainxPicker.IsEnabled = false;
nameEntry.IsEnabled = false;
n1Gridrow.IsVisible = true;
n2Gridrow.IsVisible = true;

locationPicker1.IsEnabled = false;
locationPicker2.IsEnabled = false;

settingsaveButton.IsVisible = false;

}

}

void n1Handle_SelectedIndexChanged(object sender, System.EventArgs e)
{

location1 = (string)locationPicker1.SelectedItem;
if (is1Empty == true)
{
locationPicker2.IsEnabled = true;
n2Label.IsVisible = true;

locationPicker2.Items.Remove((string)locationPicker1.SelectedItem);
}

drainxPicker.IsEnabled = false;
locationPicker1.IsEnabled = false;

}

void n2Handle_SelectedIndexChanged(object sender, System.EventArgs e)
{
location2 = (string)locationPicker2.SelectedItem;

if (is2Empty == true)
{
locationPicker2.IsEnabled = true;
}
drainxPicker.IsEnabled = false;
locationPicker2.IsEnabled = false;

}

void nxy1()
{
foreach (var location in list)
{
locationPicker1.Items.Add(location);
}

}


void nxy2()
{

foreach (var location in list)        
{
locationPicker2.Items.Add(location);
} 
}

void settingsaveButton_Clicked(object sender, System.EventArgs e)
{
bool isNameEmpty = string.IsNullOrEmpty(nameEntry.Text);

if (isNameEmpty == true)
{
DisplayAlert("Enter Name", "PLEASE", "OK");
}

else
{

Navigation.PushModalAsync(new HomePage());



//saving to Settings
Settings.n1LocationSettings = location1;
Settings.n2LocationSettings = location2;
Settings.NameSettings = username;
Settings.DrainquantitySettings = item;

drainxPicker.IsEnabled = false;
}

}

void entryNameHandle_Unfocused(object sender, Xamarin.Forms.FocusEventArgs e)
{
username = nameEntry.Text;
}

void clearHandle_Clicked(object sender, System.EventArgs e)
{   
Settings.ClearAllData();
}
}
}

我希望当我单击选项卡式设置页面时,我会进入设置页面,并输入输入的信息。就像单击按钮一样,它会转到已经填充了用户输入的设置页面。

1 个答案:

答案 0 :(得分:1)

通常,选项卡式设置页面和推送式设置页面是相同的。它们都是new fresh settings page

从您的代码中,我们可以看到您正在通过Settings插件设置Picker的值:

drainxPicker.SelectedItem = Settings.DrainquantitySettings;
locationPicker1.SelectedItem = Settings.n1LocationSettings;
locationPicker2.SelectedItem = Settings.n2LocationSettings;

因此,进入设置页面时是否填充输入的信息取决于Settings中的值。

例如:

如果Settings.DrainquantitySettings;有值,则将填充pipexPicker的信息。

当您进入选项卡式设置页面并按下设置页面以查找任何差异时,请检查Values中的Setting