Новое в 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)