Xamarin:NameScope 中已存在键为“X”的元素

Mik*_*ike 2 xaml xamarin.forms

当我尝试推送到新页面时出现以下错误。

(我使用 Xamarin.Form 4.6.0.800)

{System.ArgumentException: An element with the key 'NewAccountLogo' already exists in NameScope
Parameter name: name
  at Xamarin.Forms.Internals.NameScope.Xamarin.Forms.Internals.INameScope.RegisterName (System.String name, System.Object scopedElement) [0x0000e] in D:\a\1\s\Xamarin.Forms.Core\Internals\NameScope.cs:21 
  at amici.NewAccount.InitializeComponent () [0x00078] in C:\Users\X\source\repos\amici\amici\amici\obj\Debug\netstandard2.0\NewAccount.xaml.g.cs:46 
  at amici.NewAccount..ctor () [0x0000f] in C:\Users\X\source\repos\amici\amici\amici\NewAccount.xaml.cs:26 
  at amici.Logon+<OnCreateAccountClick>d__3.MoveNext () [0x0002a] in C:\Users\X\source\repos\amici\amici\amici\logon.xaml.cs:119 }
Run Code Online (Sandbox Code Playgroud)

错误似乎很直接,所以我返回并重命名元素,然后在我的项目中搜索相同的名称。(只有一个)。重新编译并再次尝试,相同的消息但使用新名称?所以我删除了该元素并尝试重新编译并再次尝试,有趣的是我得到了相同的消息但是下一个元素?所以现在我在想可能错误信息不太正确,或者试图告诉我其他事情。我就是想不通。下面是我的xaml。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             NavigationPage.HasNavigationBar="True"
             Title="New Account"
             x:Class="amici.NewAccount">
    <ContentPage.Content >
        <ScrollView>
            <Grid>
                <StackLayout Margin="20" Padding="10" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
                    <Image x:Name="NewAccountLogo"/>
                    <Entry x:Name="NewEmail" Placeholder="Email"/>
                    <Entry x:Name="EmailConfirm" Placeholder="Confirm Email"/>

                    <Label Text="Password between 6 and 20 characters; must contain at least one lowercase letter, one uppercase letter, one numeric digit." Margin="0,0,0,5"></Label>


                    <Entry x:Name="NewPassword" IsPassword="true" Placeholder="Password"/>
                    <Entry x:Name="PasswordConfirm" IsPassword="true" Placeholder="Confirm Password"/>

                    <Label x:Name="bntCreatAccountButton" TextColor="Blue" Text="Create Account" HorizontalOptions="Center" Margin="0,25,0,0">
                        <Label.GestureRecognizers>
                            <TapGestureRecognizer Tapped="OnCreateAccount" NumberOfTapsRequired="1" />
                        </Label.GestureRecognizers>
                    </Label>
                </StackLayout>
                <ActivityIndicator x:Name="WaitIcon"  IsRunning="{Binding IsBusy}" VerticalOptions="Center" HorizontalOptions="Center" />
            </Grid>
        </ScrollView>
    </ContentPage.Content>
</ContentPage>
Run Code Online (Sandbox Code Playgroud)

后面的代码:

  [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class NewAccount : ContentPage
    {
        public NewAccount()
        {
            InitializeComponent ();

            this.InitializeComponent();
            this.BindingContext = this;
            this.IsBusy = false;

            var bkgrndGradient = new Gradient()
            {
                Rotation = 150,
                Steps = new GradientStepCollection()
                {
                    new GradientStep(Color.White, 0),
                    new GradientStep(Color.White, .5),
                    new GradientStep(Color.FromHex("#ccd9ff"), 1)
                }
            };

            ContentPageGloss.SetBackgroundGradient(this, bkgrndGradient);
            NewAccountLogo.Source = ImageSource.FromFile("logo.png");
        }



        async private void OnCreateAccount(object sender, EventArgs e)
        {

            string Message = string.Empty;
            string title = string.Empty;
            bool results = false;
            IsBusy = true;

            try
            {


                if (ComparisonBehavior.CompareValues(NewEmail.Text, NewPassword.Text, EmailConfirm.Text,PasswordConfirm.Text, ref Message, ref title))
                {

                    await Task.Delay(1000);
                    results = RestController.CreateAccount(NewEmail.Text, NewPassword.Text);
                    IsBusy = false;

                    if (results)
                    {
                        await DisplayAlert("New Account Created.", "Thank You! Please check your email (junk mail) to activate your subscription.", "OK");
                        await Application.Current.MainPage.Navigation.PopAsync();

                    }else
                    {
                        if (Application.Current.Properties["resp"].ToString() == "Account exist")
                        {
                            await DisplayAlert("Account Exist", "Sorry this email already exist!", "OK");
                        }

                    }
                }else
                {
                    await DisplayAlert(title, Message, "OK");
                }


            }catch (Exception ex)
            {
                 await DisplayAlert("internal Error", ex.Message, "OK");
            } finally{
                IsBusy = false;
           }

        }
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。麦克风

Mik*_*ike 6

在我后面的代码中,我有 InitializeComponent (); 宣布两次。