2009-03-16 14 views
0

Das Stackpanel arbeitet nicht zusammen. Wir haben eine feste Breite und eine variable Anzahl von Elementen, die von links nach rechts darin angeordnet werden.Silverlight 2: Soll eine variable Anzahl von Elementen eine feste Breite einnehmen

Wir haben ein Stückkontrolle, die sie aus mit einem Stapel Tafel legt:

<ItemsControl x:Name="testItems" 
       HorizontalAlignment="Left" 
       VerticalAlignment="Top"> 
    <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Stacktest:ItemControl /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

Aber dies bedeutet nicht Größe die Elemente richtig. Sie sind immer gleich groß, unabhängig davon, wie viel Platz zur Verfügung steht. Wenn es zu viele Elemente gibt, werden sie auf der rechten Seite abgeschnitten und nicht so groß, dass sie alle hineinpassen. Gibt es eine Idee, wie das erreicht werden kann? Ich würde ein Raster verwenden, wenn die Anzahl der Elemente konstant ist, aber nicht. Es sind typischerweise 1-4 Artikel.

Es wäre nett, wenn die ItemsPanelTemplate ein Raster mit einer variablen Anzahl von Spalten sein könnte. Aber ich weiß nicht, ob das (oder etwas mit dem gleichen Ergebnis) in einem ItemsPanelTemplate möglich ist.

Ist die Antwort zum Schreiben einer speziellen Unterklasse des Panels, die den enthaltenen Elementen die gleiche Breite zuweist?

Antwort

1

Ich denke, was Sie wollen, ist das UniformGrid. Sie können angeben, dass es eine Zeile hat, und alle Elemente innerhalb derselben Breite haben. Dies ist vielleicht nicht genau das, was Sie suchen, aber das ist das nächste, was ich mir vorstellen kann.

Ich bin nicht sicher, ob das Silverlight Toolkit eine solche Komponente bietet, aber ich habe Beiträge gesehen, die zeigen, wie man einen baut.

Jeff Wilcox's blog zum Beispiel hat einen.

+0

Nach diesem (http://genescyconduit.wordpress.com/2008/08/19/the-neglected-panel-uniformgrid/) ein UniformGrid ist was ich will, weil Sie es als einheitliche StackPanel verwenden können spezifizierende Zeilen = "1" " – Anthony

1

Ich bin wahrscheinlich eine kleine alte Schule, aber ich mag diese Art von Sache selbst. Sie können einen kleinen Code auf dem Back-End schreiben, um eine dynamische Anzahl von Elementen in dem Raum (mit einem Raster) zu löschen und sie zu einer dynamischen Breite und gleichmäßigen Abständen zu machen.

Dies würde wahrscheinlich so funktionieren, wie Sie es möchten, und auch veränderbar sein.