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 0
setzen 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.