C# 如何在用户键入时打开/关闭软键盘上的文本预测
我有一个RichEditBox,我想在用户键入时打开和关闭TextPrediction。这是我正在尝试的代码,但它不起作用。它要求重新启动/重新打开键盘以显示更改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
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。谢谢