2009-04-15 8 views
2

J'ai ce ComboBox dans mon Silverlight UserControl:menu déroulant ComboBox au contenu dans Dimensionnement automatique 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> 

Le lenghth de la plupart des éléments peuplant la combobox est supérieure à la largeur du contrôle. Lorsque je descends la liste, la liste déroulante se développe, mais pas complètement à la largeur du contenu de l'élément, résultant en un contenu qui est découpé une barre de défilement horizontale. Cela ne se produit pas avec la même liste déroulante où le contenu est dans la largeur d'origine du contrôle.

Dans WPF, je pouvais simplement définir la largeur du conteneur d'éléments sur auto; dans Silverlight, cela entraîne une erreur catastrophique. Je peux définir le avec un nombre énorme, mais le parchemin apparaît toujours, quelle que soit la largeur. En outre, dans Silverlight 2 beta 2, il y avait une propriété DropDownWidth, avec l'une des options étant "Auto", que je ne vois pas dans RTM.

Je peux contourner cela avec un peu de supercherie, en cachant principalement la barre de défilement horizontale et en ajoutant un tas de caractères afin que la liste déroulante se développe complètement pour montrer le contenu de l'élément. Évidemment, ce bidouillage n'est pas idéal. Quelqu'un at-il rencontré un problème similaire? Y at-il quelque chose qui me manque pour forcer le combobox à se développer complètement sans une barre de défilement?

ib.

Répondre

2

Il semble qu'ils l'ont fixé dans SL3.

Si vous voulez modifier le PopUp, vous pouvez le faire depuis le Template Control de ComboBox. Dans Blend procédez comme suit:

  1. Clic droit sur ComboBox
  2. Sélectionnez « Modifier des parties de contrôle (modèle) » « Modifier une copie »
  3. Sélectionnez

Cette copie le de la box control style & afin que vous puissiez ajuster ce ScrollViewer à l'intérieur de PopUp ComboBox au contenu de votre coeur.

Vous pouvez essayer la solution que je décris here. Il détaille comment s'assurer que la hauteur et la largeur du pop-up de la zone de liste modifiable sont mises à jour lorsque des éléments sont ajoutés ou supprimés.

+0

Oui, je l'ai fait, et la meilleure solution que j'ai trouvée est celle que j'ai mentionnée dans ma question originale, mais je peux accéder aux propriétés ScrollViewer dont j'avais besoin pour le correctif directement de la ComboBox. Je vais vous donner un vote quand même> 8P SL3 FTW! –

+0

Voir mes nouvelles modifications. J'ai posté un lien vers un autre sujet qui, je pense, pourrait vous être utile. – markti

0

Vous pouvez utiliser la propriété MaxDropDownHeight du contrôle ComboBox.

Questions connexes