如何在用户键入时在软键盘上打开/关闭文本预测

时间:2015-07-27 06:16:42

标签: c# windows-phone-8.1 inputscope

我有一个RichEditBox,我想在用户输入时打开和关闭TextPrediction。这是我正在尝试的代码,但它只是不起作用。它需要重新启动/重新打开键盘以显示更改。

private void PostRichEditBox_SelectionChanged(object sender, RoutedEventArgs e)
{
     if(somecondition)
     {
           Searchterm.Text = mentionText;
           var scope = new InputScope();
           var inputScopeName = new InputScopeName { NameValue = InputScopeNameValue.NameOrPhoneNumber };

           scope.Names.Add(inputScopeName);

           PostRichEditBox.InputScope = scope;
           PostRichEditBox.IsTextPredictionEnabled = true;
      }
      else
      {
           var scope = new InputScope();
           var inputScopeName = new InputScopeName { NameValue = InputScopeNameValue.Chat };

           scope.Names.Add(inputScopeName);

           PostRichEditBox.InputScope = scope;

           PostRichEditBox.IsTextPredictionEnabled = false;
       }
}

我知道这可以做到,因为当输入'@'时Rudy Huyn的6tag会这样做,然后它会显示一个朋友建议列表,代替键盘上的文本预测。我asked him on twitter关于他是如何做到的。他只是通过改变输入模式来回复(我认为他的意思是输入镜像)。我该怎么做?

1 个答案:

答案 0 :(得分:0)

因为即使预测被关闭,预测栏也不会消失。它需要键盘关闭并重新打开以更新predictionBar,所以我做了一些更改。我现在专注于UserControl然后回到RichEditBox。而且,由于键盘永不坍塌,因此用户体验并不明显。

if (PostRichEditBox.IsTextPredictionEnabled)
                {
                   this.Focus(Windows.UI.Xaml.FocusState.Keyboard);
                    var scope = new InputScope();
                    var inputScopeName = new InputScopeName { NameValue = InputScopeNameValue.NameOrPhoneNumber };

                    scope.Names.Add(inputScopeName);

                    PostRichEditBox.InputScope = scope;
                    PostRichEditBox.IsTextPredictionEnabled = false;
                    PostRichEditBox.Focus(Windows.UI.Xaml.FocusState.Keyboard);
                 }