2016-09-22 50 views
1

我有下面的示例應用程序的代碼: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項目並按照指南進行重現):

  1. 在主應用程序頁面上單擊ListView的任何項目。
  2. 在打開的頁面上,單擊「顯示/隱藏」按鈕兩次
  3. 返回上一頁。
  4. 再次單擊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()

Download Project Sample

+0

你試圖用這個做什麼? private void Button_Clicked(object sender,EventArgs e) PasswordEntry.IsPassword =!PasswordEntry.IsPassword; } –

+0

我試圖切換PasswordEntry的外觀作爲密碼(顯示或隱藏帶星號的文本)。像這樣:https://jsfiddle.net/sqhs5fs1/2/ –

+0

你的代碼在我的電腦上工作。我沒有看到任何錯誤 –

回答

1

看起來這實際上是在表單中的錯誤。我已經提交了一個錯誤報告here

該問題似乎與設置本機TextBox控件的InputScope屬性有關。我創建了一個修補程序pull request,希望這將得到合併,並很快發佈。

+0

不錯,謝謝 –