2014-11-17 346 views
2

WinRT中的組合框具有CarouselPanel類型的默認ItemsPanel。這使得Windows 8.1應用程序在滾動組合框項目時出現「無限循環」。 如果你不想要這種行爲,有很多博客文章解釋如何「修復它」。WinRT中組合框的奇怪行爲

例如這樣:Cancel WinRT ComboBox infinte scroll effect 或:http://netitude.bc3tech.net/2013/04/12/windows-8s-combobox-and-the-carouselpanel/

這種解決方案的問題是,你會得到在組合框中的第一個項目一個怪異的行爲。 如何重現:

  • 創建一個新的空白的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'分鐘)。下拉控件中的文本現在將消失。

任何人都知道如何解決這個問題?如果我將組合框項目面板的樣式改回到CarouselPanel,它就可以工作(但當然會有無限循環)。

+0

我遇到完全相同的問題。你有沒有設法解決這個問題? – pantonis

回答

4

剛剛使用VirtualizingStackPanel代替StackPanel糾正了此問題。 我們必須設置一個尺寸,因爲它取得了屏幕的所有寬度。

<VirtualizingStackPanel HorizontalAlignment="Center" Width="150"/>

我們沒有試圖得到一個更靈活的解決方案,因爲我們不需要它尚未

希望它會幫助你

1

StackPanel中只是不能與ComoboBox工作可能的解決方案正在將其更改爲VirtualizingStackPanel,但您必須將其綁定到父級,否則它將擴展到屏幕寬度。

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