2017-06-18 50 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得到集中首次

相關問題