2016-06-13 58 views

回答

6

正如在第一个答案中提到的那样,设置键盘标志是不可能的。虽然你当然可以继承Entry,还有就是创建一个attached property一个更优雅的方式:

public class KeyboardStyle 
    { 
     public static BindableProperty KeyboardFlagsProperty = BindableProperty.CreateAttached(
      propertyName: "KeyboardFlags", 
      returnType: typeof(string), 
      declaringType: typeof(InputView), 
      defaultValue: null, 
      defaultBindingMode: BindingMode.OneWay, 
      propertyChanged: HandleKeyboardFlagsChanged); 

     public static void HandleKeyboardFlagsChanged(BindableObject obj, object oldValue, object newValue) 
     { 
      var entry = obj as InputView; 

      if(entry == null) 
      { 
       return; 
      } 

      if(newValue == null) 
      { 
       return; 
      } 

      string[] flagNames = ((string)newValue).Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
      KeyboardFlags allFlags = 0; 

      foreach (var flagName in flagNames) { 
       KeyboardFlags flags = 0; 
       Enum.TryParse<KeyboardFlags>(flagName.Trim(), out flags); 
       if(flags != 0) 
       { 
        allFlags |= flags;  
       } 
      } 

      Debug.WriteLine("Setting keyboard to: " + allFlags); 
      var keyboard = Keyboard.Create(allFlags); 

      entry.Keyboard = keyboard; 
     } 
    } 

然后从内XAML中使用它(不要忘记添加local命名空间):

<?xml version="1.0" encoding="utf-8"?> 
<ContentPage 
     xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:local="clr-namespace:KeyboardTest" 
     x:Class="KeyboardTest.KeyboardTestPage"> 

    <Entry x:Name="entry" Text="Hello Keyboard" local:KeyboardStyle.KeyboardFlags="Spellcheck,CapitalizeSentence"/> 
</ContentPage> 

你也可以使用它作为毯子样式的一部分,如下所示:

<Style TargetType="Entry"> 
    <Setter Property="local:KeyboardStyle.KeyboardFlags" 
      Value="Spellcheck,CapitalizeSentence"/> 
</Style> 
+1

哇这是一个好主意。我完全忘记了附加属性! – user1

+1

只是关于附加属性的后续问题。是否可以将它们设置为blankey样式的一部分?即使用'TargetType'还是必须为每个'Entry'元素设置? – user1

1

到现在为止它不可能在XAML中做到这一点。

您必须以编程方式执行此操作。

有关KeyboardFlags的更多信息。

建议您可以扩展Entry以及该属性。

+1

哦,那个很烂的人。我可能会编写我自己的控件,将标志公开为可绑定属性,然后在代码中设置键盘,以便在xaml中执行此操作。当我接近它时,我会将它张贴回来 – user1