Новое в WPF - какой элемент управления использовать / с чего начать?

я WPF n0ob и яЯ пытаюсь выбрать соответствующий элемент управления, чтобы получить макет, который я хочу.

Что я'я пытаюсь сделать, это нарисовать кучу квадратов (виртуальные заметки) на экране. Каждая заметка будет иметь приличный размер (~ 150 пикселей или около того), и таких заметок может быть несколько сотен. Я хочу, чтобы все это можно было прокручивать, чтобы вы могли изменить размер окна, как вам нравится, и все это должно быть масштабируемым.

мы сделали это, и это работает.

Но что ясделано, кажется ужасно неправильно ....

В коде яЯ динамически создаю заметки и добавляю их в гигантский холст. Я'Я вручную делаю математику, чтобы определить, где разместить каждую заметку и насколько большим должен быть холст. Я добавил несколько ярлыков вверху и должен был вернуться и добавитьY Offset ' значение, чтобы подтолкнуть все квадраты вниз. Я на самом деле генерирую три разных элемента управления canvas и затем добавляю каждый из них на панель стека, которая находится внутри ScrollViewer. Я добавил полосу прокрутки и установил панель стека для увеличения и уменьшения масштаба при настройке панели.

Это 'работает', но я чувствую, что я 'я действительно не использую WPF так, как онs предназначено для использования. Я пытался добиться того же с помощью сетки, но сетка неКажется, он не хочет подходить по размеру.

Может кто-нибудь сказать мнелучше' способ добиться того же внешнего вида?

Вот's мой код Xaml - как вы можете видеть; нетT много к этому ....



    
        
        
    
    
    
        

        
    
            

И тогда вот что яя делаю в коде (некрасиво !!!)

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)

Ответы на вопрос(1)

Ваш ответ на вопрос