Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 移动设备上分组的AutoSuggestBox出现意外结果_C#_Uwp_Uwp Xaml - Fatal编程技术网

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;        
    }
}