C# 移动设备上分组的AutoSuggestBox出现意外结果
我正在使用一个带有分组支持的C# 移动设备上分组的AutoSuggestBox出现意外结果,c#,uwp,uwp-xaml,C#,Uwp,Uwp Xaml,我正在使用一个带有分组支持的AutoSuggestBox,使用找到的样式,但是我在手机上显示建议弹出窗口时遇到了一个奇怪的问题(在桌面上是100%正常的,我可以在弹出窗口中看到分组列表) 发生的情况是,当我在AutoSuggestBox中写作时,会显示一个位置错误的未分组弹出窗口,如您所见: 这会一直持续到我选择了其中一个项目,但是选择通过显示正确的弹出窗口提供了更奇怪的结果,即使它是用我在选择项目之前的文本过滤的 您可以在此处的桌面上看到正确的行为: ... 私有void服务Filte
AutoSuggestBox
,使用找到的样式,但是我在手机上显示建议弹出窗口时遇到了一个奇怪的问题(在桌面上是100%正常的,我可以在弹出窗口中看到分组列表)
发生的情况是,当我在AutoSuggestBox
中写作时,会显示一个位置错误的未分组弹出窗口,如您所见:
这会一直持续到我选择了其中一个项目,但是选择通过显示正确的弹出窗口提供了更奇怪的结果,即使它是用我在选择项目之前的文本过滤的
您可以在此处的桌面上看到正确的行为:
...
私有void服务FilterAutoSuggestBox\u OnTextChanged(AutoSuggestBox发件人、AutoSuggestBoxTextChangedEventArgs参数)
{
if(args.Reason!=AutoSuggestionBoxTextChangeReason.UserInput)返回;
if(string.IsNullOrEmpty(sender.Text)&&ViewModel.AccountService!=null)
{
//用户取消了以前的选择,因此我们将其重置
ViewModel.AccountService=null;
}
//过滤结果
ServicesCollectionViewSource.Source=来自服务
在ViewModel.Services中
其中services.Name.ToLowerInvariant()包含(sender.Text.ToLowerInvariant())
按services.Section.Id列出的集团服务;
}
私有void服务FilterAutoSuggestBox_OnQuerySubmitted(AutoSuggestBox发件人、AutoSuggestBoxQuerySubmittedEventArgs)
{
if(args.ChosenSuggestion!=null)
{
ViewModel.AccountService=(服务)args.ChosenSuggestion;
}
其他的
{
ViewModel.AccountService=null;
}
}
我不明白为什么它在桌面上工作正常,而在手机上却有这种奇怪的行为,我真的需要你的帮助。我同意你采用的
GroupedAutoSuggestBoxStyle是正确的。依我看,你的代码中没有bug。您能详细介绍一下您的目标设备版本吗?最低版本:10586,目标版本:14393。14393 emulator和我的Lumia 950(14393.693)都存在此问题。请让我知道,如果你需要更多的细节或任何其他信息。我可以触摸你的项目吗?我想在真实的设备上验证这个问题。@NicoZhu MSFT这里有一个复制项目的例子。我注意到只有当顶部有足够的空间时才会显示错误的弹出窗口,这就是为什么我添加了两个AutoSuggestBox
。顶部的一个几乎可以正常工作(从我的项目复制时选择逻辑混乱),另一个显示错误的弹出窗口。我同意GroupedAutoSuggestBoxStyleyou
采用的是正确的。依我看,你的代码中没有bug。您能详细介绍一下您的目标设备版本吗?最低版本:10586,目标版本:14393。14393 emulator和我的Lumia 950(14393.693)都存在此问题。请让我知道,如果你需要更多的细节或任何其他信息。我可以触摸你的项目吗?我想在真实的设备上验证这个问题。@NicoZhu MSFT这里有一个复制项目的例子。我注意到只有当顶部有足够的空间时才会显示错误的弹出窗口,这就是为什么我添加了两个AutoSuggestBox
。上面的一个几乎可以正常工作(从我的项目复制时选择逻辑混乱),另一个显示错误的弹出窗口。
<AutoSuggestBox Style="{StaticResource GroupedAutoSuggestBoxStyle}"
UpdateTextOnSelect="True"
TextMemberPath="Name"
VerticalAlignment="Center"
ItemsSource="{x:Bind ServicesCollectionViewSource.View, Mode=OneWay}"
TextChanged="ServicesFilterAutoSuggestBox_OnTextChanged"
QuerySubmitted="ServicesFilterAutoSuggestBox_OnQuerySubmitted"
LostFocus="ServicesFilterAutoSuggestBox_OnLostFocus"
AutoMaximizeSuggestionArea="True"
Grid.Column="1">
...
private void ServicesFilterAutoSuggestBox_OnTextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{
if (args.Reason != AutoSuggestionBoxTextChangeReason.UserInput) return;
if (string.IsNullOrEmpty(sender.Text) && ViewModel.AccountService != null)
{
// User canceled previous selection, so we reset it
ViewModel.AccountService = null;
}
// Filter the results
ServicesCollectionViewSource.Source = from services
in ViewModel.Services
where services.Name.ToLowerInvariant().Contains(sender.Text.ToLowerInvariant())
group services by services.Section.Id;
}
private void ServicesFilterAutoSuggestBox_OnQuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)
{
if (args.ChosenSuggestion != null)
{
ViewModel.AccountService = (Service) args.ChosenSuggestion;
}
else
{
ViewModel.AccountService = null;
}
}