无法锁定条目:

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;
    }