Xaml WinRT中combobox的奇怪行为

Xaml WinRT中combobox的奇怪行为,xaml,combobox,windows-runtime,windows-8.1,Xaml,Combobox,Windows Runtime,Windows 8.1,WinRT中的组合框具有CarouselPanel类型的默认ItemsPanel。这使Windows 8.1应用程序在滚动组合框项目时具有“无限循环”。 如果你不想要这种行为,有很多博客文章解释如何“修复它” 例如: 或: 这个解决方案的问题是,在组合框的第一项上会出现奇怪的行为。 如何复制: 创建新的空白Windows 8.1应用程序 在mainpage.xaml中输入: <TimePicker Time="0" HorizontalAlignment="Center" Vertica

WinRT中的组合框具有CarouselPanel类型的默认ItemsPanel。这使Windows 8.1应用程序在滚动组合框项目时具有“无限循环”。 如果你不想要这种行为,有很多博客文章解释如何“修复它”

例如: 或:

这个解决方案的问题是,在组合框的第一项上会出现奇怪的行为。 如何复制:

  • 创建新的空白Windows 8.1应用程序
  • 在mainpage.xaml中输入:

    <TimePicker Time="0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    
    
    
  • 创建一个style.xaml资源字典,如下所示:

    <Style TargetType="ComboBox">
        <Style.Setters>
            <Setter Property="ItemsPanel">
                <Setter.Value>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Vertical"/>
                    </ItemsPanelTemplate>
                </Setter.Value>
            </Setter>
        </Style.Setters>
    </Style>
    
    
    
  • 现在启动应用程序,从列表中选择一项(例如“05”分钟),然后在同一下拉列表中选择第一项(例如“00”分钟)。下拉控件中的文本现在将消失


有人知道怎么解决这个问题吗?如果我将combobox itemspanel的样式改回CarouselPanel,它会工作(当然是无限循环)。

刚刚用VirtualzingStackPanel代替StackPanel纠正了这个问题。 我们必须设置一个尺寸,否则它会占据整个屏幕的宽度

我们没有尝试获得更灵活的解决方案,因为我们还不需要它


希望它能帮助您

StackPanel只是不使用Comobox可能的解决方案是将其更改为虚拟化StackPanel,但您必须绑定到父级,否则它将延伸到屏幕宽度

<ComboBox Name="ReasonComboBox"">
<ComboBox.ItemsPanel>
    <ItemsPanelTemplate>
        <VirtualizingStackPanel Width="{Binding ActualWidth, ElementName=ReasonComboBox}"/>
    </ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>

我遇到了完全相同的问题。你解决了这个问题吗?