Laden...

Suche nach Container mit gleichmäßigen Abständen und ohne Randabstand

Letzter Beitrag vor einem Monat 5 Posts 319 Views
Suche nach Container mit gleichmäßigen Abständen und ohne Randabstand

Hallo!

Ich möchte eine Collection aus Rectangles an einen Container binden, der diese dann in einem gleichmäßigen Abstand anzeigt. Ein UniformGrid hat einen Abstand am Rand, den ich nicht möchte. Zusätzlich will ich auch in Zukunft die Breite des Containers dynamisch anpassen, je nachdem, ob ein Element am Rand aus der Collection verschwindet. Es soll die Darstellung der Gegner meines SpaceInvaders Klon sein.

Mein derzeitiger XAML Code

<StackPanel x:Name="stp_EnemyPanel" Orientation="Horizontal" Canvas.Top="50" Width="500" Height="30">
   <ItemsControl ItemsSource="{Binding Enemies}">
       <ItemsControl.ItemsPanel>
           <ItemsPanelTemplate>
               <UniformGrid Rows="1" Width="500"/>
           </ItemsPanelTemplate>
       </ItemsControl.ItemsPanel>
   </ItemsControl>
</StackPanel>

Mein derzeitiges ViewModel

Opponent = new Enemy
{
   Width = 30,
   Height = 30,
   Speed = 2,
   HealthPoints = 3,
   Color = new SolidColorBrush(Colors.DarkGreen)
};
//Collection fuer die Gegner und Hinzufuegen der Gegner
Enemies = new ObservableCollection<Rectangle>();
for (int i = 0; i < 10; i++)
{
   Rectangle rectangle = new Rectangle
   {
       Width = Opponent.Width,
       Height = Opponent.Height,
       Fill = Opponent.Color
   };
   Enemies.Add(rectangle);
}

Zitat von Monokuma

Ich möchte eine Collection aus Rectangles an einen Container binden, der diese dann in einem gleichmäßigen Abstand anzeigt. Ein UniformGrid hat einen Abstand am Rand, den ich nicht möchte.

Bist du sicher, daß der Rand von dem UniformGrid kommt und nicht von der Einbettung in das äußere ItemsControl? Die Bilder in #467 – Use a UniformGrid for Evenly Spaced Rows and Columns zeigen keine inneren Ränder.
Mittels Margin müßtest du diese auf 0setzen können:

 <UniformGrid Rows="1" Margin="0" Width="500"/>

Zusätzlich will ich auch in Zukunft die Breite des Containers dynamisch anpassen, je nachdem, ob ein Element am Rand aus der Collection verschwindet.

Dazu brauchst du doch nur die Breite per Binding an eine Eigenschaft deines VM binden.

Edit:
Wäre ein Canvas für die Darstellung nicht besser geeignet (und das VM übernimmt dann die Positionierung der Objekte)?

Ich nutze auch ein Canvas. Die ItemsControl brauche ich, weil ich dann jedes einzelne Item individuell behandeln muss. Mit Margin=0 bleibt das Aussehen, das selbe.

Ich meinte anstatt des UniformGrid. Und warum hast du das ItemsControl noch mal innerhalb eines StackPanels?

Ich meinte ein ItemsControl in Zusammenhang mit einem Canvas, s. z.B.

Bei deinem bisherigen Ansatz würden doch bei Abschuß eines feindlichen Raumschiffs die restlichen dann zusammengeschoben werden (wenn das Raumschiff aus der Liste gelöscht wird).

Ich verstehe jetzt was du meinst. Leider verstehe ich nicht wie man mit ItemsControl umgeht, aber das werd ich mir wohl einprügeln müssen.