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

C# 如何在用户键入时打开/关闭软键盘上的文本预测,c#,windows-phone-8.1,inputscope,C#,Windows Phone 8.1,Inputscope,我有一个RichEditBox,我想在用户键入时打开和关闭TextPrediction。这是我正在尝试的代码,但它不起作用。它要求重新启动/重新打开键盘以显示更改 private void PostRichEditBox_SelectionChanged(object sender, RoutedEventArgs e) { if(somecondition) { Searchterm.Text = mentionText; var

我有一个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在键入@时会这样做,然后它会在键盘上显示朋友建议列表,而不是文本预测。我不知道他是怎么做到的。他只是通过改变inputmode(我想他指的是inputscope)来回答。我该怎么做?

因为即使预测被关闭,预测栏也不会消失。它需要键盘关闭并重新打开以更新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);
                 }

因为即使关闭预测,预测栏也不会消失。它需要键盘关闭并重新打开以更新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);
                 }

我猜这是不可能的,因为你正在用这种方式改变键盘。您可以尝试取消焦点、更改范围和再次聚焦,但这会导致糟糕的用户体验,因为您不太可能以足够快的速度让用户注意不到。@PawełMach,但Rudy正在他的应用程序中这样做。这很好。您在两个代码路径上都有
PostRichEditBox.IsTextPredictionEnabled=true
,这是故意的吗?尝试将其设置为false,但似乎有效,延迟一个字母,这似乎与6tag的体验一致(当您键入“@”时,自动提示栏仍然可见,尽管是空的,并且在您开始键入名称时消失)@KooKiz抱歉,仅在我的代码中为false。我复制粘贴了相同的代码,但忘了更改。让我再检查一下那个延迟的东西是否真的起作用了。@KooKiz是的,它真的起作用了。我忘了将IsTextPredictionEnable=true更改为false。谢天谢地,我猜这是不可能的,因为你正在用这种方式更改键盘。您可以尝试取消焦点、更改范围和再次聚焦,但这会导致糟糕的用户体验,因为您不太可能以足够快的速度让用户注意不到。@PawełMach,但Rudy正在他的应用程序中这样做。这很好。您在两个代码路径上都有
PostRichEditBox.IsTextPredictionEnabled=true
,这是故意的吗?尝试将其设置为false,但似乎有效,延迟一个字母,这似乎与6tag的体验一致(当您键入“@”时,自动提示栏仍然可见,尽管是空的,并且在您开始键入名称时消失)@KooKiz抱歉,仅在我的代码中为false。我复制粘贴了相同的代码,但忘了更改。让我再检查一下那个延迟的东西是否真的起作用了。@KooKiz是的,它真的起作用了。我忘了将IsTextPredictionEnable=true更改为false。谢谢