Выравнивание по динамически создаваемым элементам - PullRequest
1 голос
/ 06 декабря 2011

Category Image

Привет,

Основываясь на изображении выше, я бы хотел выровнять слова «Действие», «Приключение», «Аркада» по левому краю и выровнять его так, чтобы он отображался на той же высоте, что и синяя стрелка вправо

мой код для этого создается динамически:

            Dim intRow As Integer
            Dim intColumn As Integer


            intRow = 0
            intColumn = 0
            Dim rd As RowDefinition

            For Each abc In ArrayOfItems

                Dim newButton As New Button
                newButton.MaxHeight = 35
                newButton.MaxWidth = 300
                newButton.Background = Brushes.Transparent
                newButton.BorderBrush = Brushes.Transparent
                newButton.Tag = abc.application_category_id

                Dim sp As New StackPanel

                sp.Orientation = Orientation.Horizontal
                sp.HorizontalAlignment = Windows.HorizontalAlignment.Left
                sp.VerticalAlignment = Windows.VerticalAlignment.Center

                Dim Image2 As New Image
                Dim src As New Uri("/Images/chevron_blue.png", UriKind.Relative)
                Dim img As New BitmapImage(src)

                Image2.Width = 10
                Image2.Height = 10
                Image2.HorizontalAlignment = Windows.HorizontalAlignment.Left
                Image2.VerticalAlignment = Windows.HorizontalAlignment.Left
                Image2.Source = img

                Dim LabelApp As New Label
                LabelApp.Content = abc.category_name
                LabelApp.FontWeight = FontWeights.Bold
                LabelApp.FontSize = 9
                LabelApp.MaxWidth = 270
                LabelApp.Foreground = Brushes.Black
                LabelApp.HorizontalContentAlignment = Windows.HorizontalAlignment.Left
                LabelApp.VerticalAlignment = Windows.HorizontalAlignment.Left

                sp.Children.Add(LabelApp)
                sp.Children.Add(Image2)

                newButton.Content = sp

                Grid.SetColumn(newButton, intColumn)
                Grid.SetRow(newButton, intRow)
                gridCategoryGames.Children.Add(newButton)


                intRow = intRow + 1

                rd = New RowDefinition With {.Height = GridLength.Auto}

                gridCategoryGames.RowDefinitions.Add(rd)
                gridCategoryGames.UpdateLayout()


            Next abc
        End If

1 Ответ

2 голосов
/ 06 декабря 2011

Ой, это ужасный способ сделать это:)

К счастью, в WPF есть кое-что, что существенно сократит ваш код, ItemsControl .Поскольку у вас уже есть ArrayOfItems, что, очевидно, является IEnumerable, вы можете создать свой XAML следующим образом:

    <ItemsControl ItemsSource="{Binding ArrayOfItems}" >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Vertical" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate >
                <StackPanel Orientation="Vertical" HorizontalAlignment="Right" >
                    <TextBlock Text="myText"/>
                    <Image Source="path to my image" />
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

Затем вы сможете избавиться от всего того кода, который создает элементы вручную.Элементы управления, указанные в ItemsControl.ItemTemplate, будут повторяться для каждого элемента в вашем списке.Небо - предел этого подхода (есть буквально тысячи примеров того, как использовать этот элемент управления).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...