WPF заполнить панель стека кнопками? - PullRequest
0 голосов
/ 11 октября 2018

Я создаю кнопки во время выполнения, вычисляю размер StackPanel и делю на размер кнопок, а затем добавляю кнопки в StackPanel.

Теперь я бы хотел, чтобы конечный результат выглядел так:

********
**BBBB**
**BBBB**
**BBBB**
********

Теперь, с помощью StackPanel я получаю следующее:

********
**    **
**BBBB**
**    **
********

Является ли StackPanel надлежащим контролем для выполнения такой работы?

Код ниже предназначен для другой StackPanel (которая работает), нокнопки добавляются по вертикали:

*****
**B**
**B**
**B**
*****

Это в Program.cs

 private void addButtonGrp()
    {

        //Calculate size of container to determine number of buttons
        int btnMinimumHeightSize = 30;
        int btnNumberCreated = (Convert.ToInt16(rctGrupe.Height) / btnMinimumHeightSize);  

        for (int i = 0; i < btnNumberCreated ; i++)
        {


            CreateGroupButtons btn = new CreateGroupButtons();
            var btnX = new Button();

            btnX=(btn.addButton(i,btnMinimumHeightSize,Convert.ToInt16(stPanel.Width)));
            btnX.Click += ClickHandler2;

            if (i==btnNumberCreated -1 )
            {
                btnX.Height = btnMinimumHeightSize + ((Convert.ToDouble(rctGrupe.Height) / btnMinimumHeightSize) % 1)*(btnNumberCreated);
            }

            stPanel.Children.Add(btnX);
        }
    }

И это в классе CreateGroupButtons

public Button addButton(int num, int btnHeight, int btnWidth)
    {

        var btnX = new Button { Content = "Group " + num, Tag = num, Height = btnHeight, Width=btnWidth };
        return btnX;
    }

1 Ответ

0 голосов
/ 11 октября 2018

Вот базовый пример заполнения UniformGrid сеткой кнопок 4x3:

<ItemsControl x:Name="buttonGrid">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="4"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding}" ContentStringFormat="Group {0}"
                    Click="ClickHandler2"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Установите для свойства ItemsSource значение IEnumerable<int> следующим образом:

buttonGrid.ItemsSource = Enumerable.Range(1, 12);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...