Neu in WPF - Welches Steuerelement ist zu verwenden / Erste Schritte?

Ich bin ein WPF n0ob und habe Mühe, das entsprechende Steuerelement auszuwählen, um das gewünschte Layout zu erhalten.

Ich versuche, ein paar Quadrate (virtuelle Haftnotizen) auf den Bildschirm zu zeichnen. Jede Note wird eine anständige Größe haben (ca. 150 Pixel) und es könnte Hunderte von diesen Noten geben. Ich möchte, dass das Ganze scrollbar ist, so dass Sie die Größe des Fensters nach Belieben ändern können und das Ganze zoombar sein soll.

Ich habe das getan und es funktioniert.
Aber was ich getan habe, scheint furchtbar falsch ...

Im Code erstelle ich dynamisch Haftnotizen und füge sie einer riesigen Leinwand hinzu. Ich berechne manuell, wo und wie groß die Leinwand sein soll. Ich habe oben einige Bezeichnungen hinzugefügt und musste zurückgehen und einen Y-Versatz-Wert hinzufügen, um alle Quadrate nach unten zu drücken. Eigentlich generiere ich drei verschiedene Canvas-Steuerelemente und füge sie dann einem Stapelbereich in einem ScrollViewer hinzu. Ich habe eine Bildlaufleiste hinzugefügt und das Stapelbedienfeld so eingestellt, dass es beim Anpassen der Leiste vergrößert und verkleinert wird.

Es 'funktioniert', aber ich habe das Gefühl, dass ich WPF wirklich nicht so verwende, wie es verwendet werden soll. Ich habe versucht, dasselbe mit einem Raster zu erreichen, aber das Raster schien sich nicht entsprechend dimensionieren zu wollen.

Kann mir jemand einen "besseren" Weg nennen, um den gleichen Look zu erzielen?

Hier ist mein Xaml-Code - wie Sie sehen können; da ist nicht viel dran ....

<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="25" />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Slider x:Name="ZoomSlider" Minimum="0.01" Value="1" Maximum="2" Margin="0,0,0,6" />
    <ScrollViewer x:Name="MyScroller" Grid.Row="1" HorizontalScrollBarVisibility="Visible"  HorizontalContentAlignment="Center" VerticalContentAlignment="Center">
        <StackPanel x:Name="TicketsGrid"  Background="White" HorizontalAlignment="Center">

        </StackPanel>
    </ScrollViewer>
</Grid>            

Und dann ist hier, was ich im Code mache (hässlich !!!)

For Each myWorkItem As WorkItem In myWorkItems
        Dim newRect As New Border

        newRect.Width = TicketSizeX
        newRect.Height = TicketSizeY

        If myWorkItem.State.ToUpper.Contains("HOLD") Then
            newRect.Background = New SolidColorBrush(Colors.Purple)
        Else
            newRect.Background = New SolidColorBrush(Color)
        End If

        newRect.CornerRadius = New System.Windows.CornerRadius(5)
        newRect.BorderThickness = New System.Windows.Thickness(1)
        newRect.BorderBrush = New SolidColorBrush(Colors.Black)

        Dim myPanel As New StackPanel
        newRect.Child = myPanel

        Dim lblTitle As New Label
        lblTitle.Content = myWorkItem.Id
        lblTitle.FontWeight = System.Windows.FontWeights.Bold

        Dim lblDesc As New TextBlock
        lblDesc.Text = myWorkItem.Title
        lblDesc.TextWrapping = TextWrapping.Wrap


        myPanel.Children.Add(lblTitle)
        myPanel.Children.Add(lblDesc)

        newRect.SetValue(Canvas.LeftProperty, CType(((TicketCount Mod TicketsXPerUser) * TicketStepX) + (xOffset * TicketStepX * TicketsXPerUser), Double))
        newRect.SetValue(Canvas.TopProperty, CType(((Math.Floor((TicketCount / TicketsXPerUser)) * TicketStepY)) + NameLabelHeight, Double))

        myCanvas.Children.Add(newRect)
        TicketCount += 1
    Next

    MyCanvas.Width = (TicketStepX * TicketsXPerUser) * myTFS.SharedCodeTeam.Count
    MyCanvas.Height = (CType(((Math.Floor((MaxTicket / TicketsXPerUser)) + 1) * TicketStepY), Double))

    TicketsGrid.Children.Add(MyCanvas)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage