无法锁定条目:
Unable to lock entry:
Entry
在我移动到另一个页面后自动为空。我如何维护 Entry 的状态,以便它只在我需要时 change/empty?
page1.xaml:
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="NSF_app.setting">
<StackLayout BackgroundColor="White" Padding="20"
VerticalOptions="Center" HorizontalOptions="Fill">
<Entry x:Name="UserEntry"
VerticalOptions="CenterAndExpand"
InputTransparent="True" IsEnabled="False" IsReadOnly="True"/>
<Button Text="read_Only" Clicked="Reado_OnClicked"/>
<Button Text="Remove" Clicked="remove_OnClicked"/>
</StackLayout>
page1.xaml.cs:
namespace NSF_app
{
public partial class page1
{
public static string EntryValue = "";
public page1()
{
InitializeComponent();
}
private void Reado_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = true;
UserEntry.InputTransparent = true;
UserEntry.IsEnabled = false;
}
private void remove_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = false;
UserEntry.InputTransparent = false;
UserEntry.IsEnabled = true;
}
}
}
我用下面的代码测试。该条目在第一次启用,然后我单击删除以输入文本“hello”。之后我会导航到另一个页面。当我单击后退按钮返回第 1 页时,“你好”文本仍会出现在条目中。
App.xaml.cs:
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new Page1());
}
Page1.xaml.cs:
public Page1()
{
InitializeComponent();
}
public static string EntryValue = "";
private void Reado_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = true;
UserEntry.InputTransparent = true;
UserEntry.IsEnabled = false;
}
private void remove_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = false;
UserEntry.InputTransparent = false;
UserEntry.IsEnabled = true;
}
async void Button_Clicked(object sender, EventArgs e)
{
await Navigation.PushAsync(new MainPage());
}
更新:
一个简单的方法是在您的 AppShell 中定义两个 属性。
AppShell.xaml.cs:
public partial class AppShell : Xamarin.Forms.Shell
{
public ICommand LogoutCommand => new Command(async () => await NavigationEvent());
public string EntryValue { get; set; }
async Task NavigationEvent()
{
await Shell.Current.GoToAsync("page1");
}
public AppShell()
{
InitializeComponent();
Routing.RegisterRoute("page1", typeof(Page1));
this.BindingContext = this;
}
}
Xaml:
<ContentPage.Content>
<StackLayout
Padding="20"
BackgroundColor="White"
HorizontalOptions="Fill"
VerticalOptions="Center">
<Entry
x:Name="UserEntry"
InputTransparent="True"
IsEnabled="False"
IsReadOnly="True"
Text="{Binding EntryValue}"
TextChanged="UserEntry_TextChanged"
VerticalOptions="CenterAndExpand" />
<Button Clicked="Reado_OnClicked" Text="read_Only" />
<Button Clicked="remove_OnClicked" Text="Remove" />
</StackLayout>
</ContentPage.Content>
隐藏代码:
public Page1()
{
InitializeComponent();
UserEntry.Text = new AppShell().EntryValue;
}
private void Reado_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = true;
UserEntry.InputTransparent = true;
UserEntry.IsEnabled = false;
}
private void remove_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = false;
UserEntry.InputTransparent = false;
UserEntry.IsEnabled = true;
}
private void UserEntry_TextChanged(object sender, TextChangedEventArgs e)
{
new AppShell().EntryValue = UserEntry.Text;
}
Entry
在我移动到另一个页面后自动为空。我如何维护 Entry 的状态,以便它只在我需要时 change/empty?
page1.xaml:
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="NSF_app.setting">
<StackLayout BackgroundColor="White" Padding="20"
VerticalOptions="Center" HorizontalOptions="Fill">
<Entry x:Name="UserEntry"
VerticalOptions="CenterAndExpand"
InputTransparent="True" IsEnabled="False" IsReadOnly="True"/>
<Button Text="read_Only" Clicked="Reado_OnClicked"/>
<Button Text="Remove" Clicked="remove_OnClicked"/>
</StackLayout>
page1.xaml.cs:
namespace NSF_app
{
public partial class page1
{
public static string EntryValue = "";
public page1()
{
InitializeComponent();
}
private void Reado_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = true;
UserEntry.InputTransparent = true;
UserEntry.IsEnabled = false;
}
private void remove_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = false;
UserEntry.InputTransparent = false;
UserEntry.IsEnabled = true;
}
}
}
我用下面的代码测试。该条目在第一次启用,然后我单击删除以输入文本“hello”。之后我会导航到另一个页面。当我单击后退按钮返回第 1 页时,“你好”文本仍会出现在条目中。
App.xaml.cs:
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new Page1());
}
Page1.xaml.cs:
public Page1()
{
InitializeComponent();
}
public static string EntryValue = "";
private void Reado_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = true;
UserEntry.InputTransparent = true;
UserEntry.IsEnabled = false;
}
private void remove_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = false;
UserEntry.InputTransparent = false;
UserEntry.IsEnabled = true;
}
async void Button_Clicked(object sender, EventArgs e)
{
await Navigation.PushAsync(new MainPage());
}
更新:
一个简单的方法是在您的 AppShell 中定义两个 属性。
AppShell.xaml.cs:
public partial class AppShell : Xamarin.Forms.Shell
{
public ICommand LogoutCommand => new Command(async () => await NavigationEvent());
public string EntryValue { get; set; }
async Task NavigationEvent()
{
await Shell.Current.GoToAsync("page1");
}
public AppShell()
{
InitializeComponent();
Routing.RegisterRoute("page1", typeof(Page1));
this.BindingContext = this;
}
}
Xaml:
<ContentPage.Content>
<StackLayout
Padding="20"
BackgroundColor="White"
HorizontalOptions="Fill"
VerticalOptions="Center">
<Entry
x:Name="UserEntry"
InputTransparent="True"
IsEnabled="False"
IsReadOnly="True"
Text="{Binding EntryValue}"
TextChanged="UserEntry_TextChanged"
VerticalOptions="CenterAndExpand" />
<Button Clicked="Reado_OnClicked" Text="read_Only" />
<Button Clicked="remove_OnClicked" Text="Remove" />
</StackLayout>
</ContentPage.Content>
隐藏代码:
public Page1()
{
InitializeComponent();
UserEntry.Text = new AppShell().EntryValue;
}
private void Reado_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = true;
UserEntry.InputTransparent = true;
UserEntry.IsEnabled = false;
}
private void remove_OnClicked(object sender, EventArgs e)
{
UserEntry.IsReadOnly = false;
UserEntry.InputTransparent = false;
UserEntry.IsEnabled = true;
}
private void UserEntry_TextChanged(object sender, TextChangedEventArgs e)
{
new AppShell().EntryValue = UserEntry.Text;
}