2017-06-18 41 views
0

在UWP更改触摸键盘布局(InputScope),有一个为文本框和RichEditBox可用InputScope方法,其可以被用来定义键盘布局不同类型的输入。 但问题是没有AutoSuggestBox的InputScope。我使用AutoSuggestBox来输入URI,因此我需要'.com'按钮才能出现在触摸键盘上。为AutoSuggestBox

我知道AutoSuggestBox从TextBox类(可能)得到的,因此它应与inputScope方法工作。我用这个黑客 -

private void AutoSuggestBox_GotFocus(object sender, RoutedEventArgs e) 
    { 
     InputScope keyType = new InputScope(); 
     InputScopeName typeOfKeyboard = new InputScopeName(); 
     typeOfKeyboard.NameValue = InputScopeNameValue.Url; 
     keyType.Names.Add(typeOfKeyboard); 
     (e.OriginalSource as TextBox).InputScope = keyType; 
    } 

但它仍然无法正常工作。是否有任何替代解决方案,因为我不想用任何其他输入类型替换ASB。

+1

它不是从TextBox派生的。你可以在[这里]看到它(https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.autosuggestbox)。 –

+0

我提到的黑客工作但不完美。当autosuggestbox第一次获得焦点时,键盘布局保持正常,但对于随后所有对该方框的调用,键盘都会根据需要显示(使用'.com'键)。所以得出的结论是,它是从textBox派生的,或者如果不是,那么两者至少有相同的父类。 @MarianDolinský –

+0

@MarianDolinský,我找了一个解决方案,这将在任何情况下的应用程序是否启动刚才也已经在内存中已经工作。 –

回答

1

您的代码段应该工作。之前AutoSuggestBox得到集中首次InputScope是默认值,所以当它第一次集中,新的输入范围简化版,生效,从第二集中将需要的效果。

AutoSuggestBox实际上由TextBoxPopup组成。要改变AutoSuggestBox输入范围实际上是改变AutoSuggestBox内部TextBox的输入范围。

<AutoSuggestBox x:Name="autosuggestbox"> 
    <AutoSuggestBox.Style> 
     <Style TargetType="AutoSuggestBox"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="AutoSuggestBox"> 
         <Grid x:Name="LayoutRoot"> 
          <TextBox 
           x:Name="TextBox" 
           Width="{TemplateBinding Width}" 
           Margin="0" 
           Canvas.ZIndex="0" 
           DesiredCandidateWindowAlignment="BottomEdge" 
           Header="{TemplateBinding Header}" 
           InputScope="Url" 
           PlaceholderText="{TemplateBinding PlaceholderText}" 
           ScrollViewer.BringIntoViewOnFocusChange="False" 
           Style="{TemplateBinding TextBoxStyle}" /> 
          <Popup x:Name="SuggestionsPopup"> 
           <Border x:Name="SuggestionsContainer"> 
            <Border.RenderTransform> 
             <TranslateTransform x:Name="UpwardTransform" /> 
            </Border.RenderTransform> 
            <ListView 
             x:Name="SuggestionsList" 
             MaxHeight="{ThemeResource AutoSuggestListMaxHeight}" 
             Margin="{ThemeResource AutoSuggestListMargin}" 
             Padding="{ThemeResource AutoSuggestListPadding}" 
             Background="{ThemeResource AutoSuggestBoxSuggestionsListBackground}" 
             BorderBrush="{ThemeResource AutoSuggestBoxSuggestionsListBorderBrush}" 
             BorderThickness="{ThemeResource AutoSuggestListBorderThemeThickness}" 
             DisplayMemberPath="{TemplateBinding DisplayMemberPath}" 
             IsItemClickEnabled="True" 
             ItemContainerStyle="{TemplateBinding ItemContainerStyle}" 
             ItemTemplate="{TemplateBinding ItemTemplate}" 
             ItemTemplateSelector="{TemplateBinding ItemTemplateSelector}"> 
             <ListView.ItemContainerTransitions> 
              <TransitionCollection /> 
             </ListView.ItemContainerTransitions> 
            </ListView> 
           </Border> 
          </Popup> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="Orientation"> 
            <VisualState x:Name="Landscape" /> 
            <VisualState x:Name="Portrait" /> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </AutoSuggestBox.Style> 
</AutoSuggestBox> 

更多细节请参考AutoSuggestBox styles and templates:那么如下更新AutoSuggestBox模板。

+0

感谢您的回答,但它缺少一点解释。无论如何,提供的解决方案为我工作就像一个冠军。 –

0

您可以编辑AutoSuggestBox的模板,并在XAML中将InputScope设置为TextBoxHere你可以找到默认模板AutoSuggestBox。后AutoSuggestBox得到集中首次

相关问题