我有下面的示例應用程序的代碼:Xamarin形式 - 錯誤(僅在UWP)切換輸入視圖中的IsPassword當
App.cs(入口點)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xamarin.Forms;
namespace App1
{
public class ListItem
{
public string ItemText { get; set; }
public string ItemDetail { get; set; }
public string Password { get; set; }
}
public class App : Application
{
public App()
{
// The root page of your application
var listView = new ListView
{
ItemTemplate = new DataTemplate(() =>
{
var textCell = new TextCell();
textCell.SetBinding(TextCell.TextProperty, "ItemText");
textCell.SetBinding(TextCell.DetailProperty, "ItemDetail");
return textCell;
}),
VerticalOptions = LayoutOptions.FillAndExpand,
ItemsSource = new List<ListItem>
{
new ListItem
{
ItemText = "Item 1",
ItemDetail = "Detail 1",
Password = "123456"
},
new ListItem
{
ItemText = "Item 2",
ItemDetail = "Detail 2",
Password = "76432"
},
new ListItem
{
ItemText = "Item 3",
ItemDetail = "Detail 3",
Password = "66543"
},
}
};
listView.ItemTapped += ListView_ItemTapped;
var content = new ContentPage
{
Title = "App1",
Content = new StackLayout
{
VerticalOptions = LayoutOptions.Center,
Children =
{
new ScrollView
{
Content = new StackLayout
{
Padding = 10,
Children =
{
listView
}
}
}
}
}
};
MainPage = new NavigationPage(content);
}
private async void ListView_ItemTapped(object sender, ItemTappedEventArgs e)
{
await this.MainPage.Navigation.PushAsync(new PasswordPage((e.Item as ListItem).Password));
}
protected override void OnStart()
{
// Handle when your app starts
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
}
PasswordPage.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using Xamarin.Forms;
namespace App1
{
public class PasswordPage : ContentPage
{
private string Password;
private Entry PasswordEntry = new Entry();
public PasswordPage(string password)
{
this.Password = password;
PasswordEntry.IsPassword = true;
PasswordEntry.Text = password;
var button = new Button();
button.Text = "Show/Hide";
button.Clicked += Button_Clicked;
Content = new StackLayout
{
Children = {
new Label { Text = "Password" },
PasswordEntry,
button
}
};
}
private void Button_Clicked(object sender, EventArgs e)
{
PasswordEntry.IsPassword = !PasswordEntry.IsPassword;
}
}
}
我在下面的場景中得到以下錯誤,僅在UWP上(您可以download附件示例項目,運行UWP項目並按照指南進行重現):
- 在主應用程序頁面上單擊ListView的任何項目。
- 在打開的頁面上,單擊「顯示/隱藏」按鈕兩次。
- 返回上一頁。
- 再次單擊ListView的任何項目。
只有在切換「Entry」視圖的「IsPassword」屬性時,該錯誤纔會出現在UWP/Windows上。如果單擊「顯示/隱藏」一次,則錯誤不會顯示。
錯誤:
System.ArgumentException
The parameter is incorrect.
E_RUNTIME_SETVALUE
at Windows.UI.Xaml.DependencyObject.SetValue(DependencyProperty dp, Object value) at Xamarin.Forms.Platform.UWP.EntryRenderer.UpdateIsPassword() at Xamarin.Forms.Platform.UWP.EntryRenderer.OnElementChanged(ElementChangedEventArgs'1 e) at Xamarin.Forms.Platform.UWP.VisualElementRenderer'2.SetElement(VisualElement element) at Xamarin.Forms.Platform.UWP.Platform.CreateRenderer(VisualElement element) at Xamarin.Forms.Platform.UWP.VisualElementPackager.OnChildAdded(Object sender, ElementEventArgs e) at Xamarin.Forms.Platform.UWP.VisualElementPackager.Load() at Xamarin.Forms.Platform.UWP.VisualElementRenderer'2.SetElement(VisualElement element) at Xamarin.Forms.Platform.UWP.Platform.CreateRenderer(VisualElement element) at Xamarin.Forms.Platform.UWP.VisualElementPackager.OnChildAdded(Object sender, ElementEventArgs e) at Xamarin.Forms.Platform.UWP.VisualElementPackager.Load() at Xamarin.Forms.Platform.UWP.VisualElementRenderer'2.SetElement(VisualElement element) at Xamarin.Forms.Platform.UWP.Platform.CreateRenderer(VisualElement element) at Xamarin.Forms.Platform.UWP.VisualElementExtensions.GetOrCreateRenderer(VisualElement self) at Xamarin.Forms.Platform.UWP.NavigationPageRenderer.SetPage(Page page, Boolean isAnimated, Boolean isPopping) at Xamarin.Forms.Platform.UWP.NavigationPageRenderer.OnPushRequested(Object sender, NavigationRequestedEventArgs e) at Xamarin.Forms.NavigationPage.d__90.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Xamarin.Forms.NavigationPage.d__48.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at App1.App.d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.b__6_0(Object state) at System.Threading.WinRTSynchronizationContext.Invoker.InvokeCore()
你試圖用這個做什麼? private void Button_Clicked(object sender,EventArgs e) PasswordEntry.IsPassword =!PasswordEntry.IsPassword; } –
我試圖切換PasswordEntry的外觀作爲密碼(顯示或隱藏帶星號的文本)。像這樣:https://jsfiddle.net/sqhs5fs1/2/ –
你的代碼在我的電腦上工作。我沒有看到任何錯誤 –