2009-04-15 81 views
2

內容我有這個組合框在我的Silverlight用戶控件:自動調整大小組合框下拉菜單在Silverlight

 <ComboBox 
      AutomationProperties.AutomationId="cmbProjects" 
      Grid.Row="0" 
      Grid.Column="2" 
      ItemsSource="{Binding Projects}" 
      SelectedItem="{Binding SelectedProject, Mode=TwoWay}" 
      Style="{StaticResource DefaultComboBoxStyle}"      
      > 
      <ComboBox.ItemTemplate> 
       <DataTemplate>     
        <StackPanel> 
         <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch"> 
          <TextBlock Foreground="DarkRed" AutomationProperties.AutomationId="{Binding Number}" Width="100" Margin="0" Text="{Binding Number, Converter={StaticResource StringFormatter},ConverterParameter='\{0\}'}" /> 
          <TextBlock AutomationProperties.AutomationId="{Binding Description}" Text="{Binding Description, Converter={StaticResource StringFormatter},ConverterParameter='\{0\}  '}" /> 
         </StackPanel> 
        </StackPanel> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 

的大部分填充ComboBox中的項目的lenghth超出控制的寬度。當我下拉列表時,下拉菜單會展開,但不會完全展示到項目內容的寬度,從而導致剪裁水平滾動條的內容。對於內容在控件的原始寬度內的完全相同的組合框,不會發生這種情況。

在WPF中,我可以簡單地將item容器的寬度設置爲auto;在Silverlight中這會導致一個災難性的錯誤。我可以設置爲一個巨大的數字,但滾動仍然出現,無論寬度如何。另外,在Silverlight 2 beta 2中,有一個DropDownWidth屬性,其中一個選項是「Auto」,這在RTM中是看不到的。

我可以繞過這一點小費,主要是隱藏水平滾動條和附加一串字符,以便下拉菜單完全展開以顯示項目內容。很顯然,這種破解並不理想。有沒有人遇到類似的問題?有沒有什麼我失蹤,迫使組合框沒有滾動條充分展開?

ib。

回答

2

看來他們將其固定在SL3中。

如果你想調整PopUp,你可以在ComboBox的控制模板中做到這一點。在混合請按照下列步驟操作:

  1. 右鍵單擊組合框
  2. 選擇「編輯控制部件(模板)」
  3. 選擇「編輯副本」

這將複製出來的box控制風格&模板,以便您可以將ComboBox PopUp中的ScrollViewer調整爲您心中的內容。

您可能想嘗試我描述的解決方案here。它詳細介紹瞭如何確保在添加或刪除項目時更新組合框彈出窗口的高度和寬度。

+0

是的,我已經這樣做了,我能想到的最好的解決方案就是我在原始問題中提到的那個,但是我可以直接從ComboBox訪問我需要的修復所需的ScrollViewer屬性。無論如何,我會給你一票> 8P SL3 FTW! – 2009-04-16 22:29:37

0

您可以使用ComboBox控件的MaxDropDownHeight屬性。