2009-04-15 13 views
2

Ich habe diese ComboBox in meinem Silverlight-Usercontrol:Autosizing ComboBox Dropdown-Liste Inhalt in 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> 

Die lenghth der meisten Elemente Bestücken der Combobox die Breite des Steuer überschreitet. Wenn ich die Liste dropdown, das Dropdown erweitert, aber nicht vollständig auf die Breite des Inhalts des Elements, was zu Inhalt, der eine horizontale Bildlaufleiste abgeschnitten wird. Dies passiert nicht mit genau derselben Combobox, bei der der Inhalt innerhalb der ursprünglichen Breite des Steuerelements liegt.

In WPF konnte ich einfach die Breite des Objektcontainers auf auto festlegen; In Silverlight führt dies zu einem katastrophalen Fehler. Ich kann das mit einer großen Zahl einstellen, aber die Rolle erscheint immer, ungeachtet der Breite. Außerdem gab es in Silverlight 2 Beta 2 eine Eigenschaft DropDownWidth, mit einer der Optionen "Auto", die ich in RTM nicht sehe.

Ich kann das mit ein bisschen Trickerei umgehen, indem ich hauptsächlich die horizontale Bildlaufleiste ausgeblendet habe und eine Reihe von Zeichen angehängt habe, so dass das Dropdown vollständig erweitert wurde, um den Inhalt des Elements anzuzeigen. Offensichtlich ist dieser Hack nicht ideal. Hat jemand ähnliches Problem erlebt? Gibt es etwas, das ich vermisse, um die Combobox zu zwingen, ohne Scrollbar vollständig zu expandieren?

ib.

Antwort

2

Es scheint, dass sie es in SL3 behoben haben.

Wenn Sie das PopUp optimieren möchten, können Sie dies aus der Control Template der ComboBox heraus tun. In Mischung folgendermaßen vor:

  1. Rechts auf ComboBox Klicken
  2. "Teile Edit Control (Template)" Wählen Sie
  3. Wählen Sie "Bearbeiten Sie eine Kopie"

Dies wird die aus der Kopie Box-Steuerelement Stil & Vorlage, so dass Sie ScrollViewer im PopUp der ComboBox nach Herzenslust optimieren können.

Sie können die Lösung versuchen, die ich beschreibe here. Es wird beschrieben, wie sichergestellt werden kann, dass die Höhe und Breite des Combobox-Popups aktualisiert werden, wenn Elemente hinzugefügt oder entfernt werden.

+0

Ja, das habe ich getan, und die beste Lösung, die ich mir vorstellen konnte, war diejenige, die ich in meiner ursprünglichen Frage erwähnt habe. Ich kann jedoch direkt von der ComboBox auf die ScrollViewer-Eigenschaften zugreifen, die ich für den Fix benötigte. Ich gebe dir trotzdem eine Stimme> 8P SL3 FTW! –

+0

Siehe meine neuen Bearbeitungen. Ich habe einen Link zu einem anderen Thema gepostet, von dem ich denke, dass es Ihnen helfen könnte. – markti

0

Sie können die MaxDropDownHeight-Eigenschaft des ComboBox-Steuerelements verwenden.

Verwandte Themen