У меня есть форма WPF с сеткой и внутри этой сетки в строке (1). Столбец (1) у меня есть StackPanel.Внутри этой StackPanel я хочу генерировать кнопки.
Я не знаю, сколько кнопок будет сгенерировано, поскольку форма (с сеткой и stackPanel) может быть разного размера.
Код ниже работает, кнопки генерируются, если я запускаю этот кусок кода на Button_Click, например.
Но кнопки не генерируются, если я запускаю этот кусок кода после InitializeComponent ().
Я предполагаю, чтопосле того, как InitializeComponent WPF форма все еще не прорисована (или закончила загрузку), поэтому мой stPanel.ActualHeigh == "0", и, поскольку я не могу делить на ноль, ничего не происходит.
Можете ли вы предложить какой-то обходной путь, илиеще лучшее правильное решение?
public partial class frmReceipt : Window
{
public frmReceipt()
{
InitializeComponent();
addButtonGrp(); //am i too fast :)
}
private void addButtonGrp()
{
//Calculate size of container to determine numbers of button
int btnMinimumHeightSize = 30;
int btnNumberCreated = (Convert.ToInt16(stPanel.ActualHeight) / btnMinimumHeightSize);
for (int i = 0; i < btnNumberCreated; i++)
{
CreateGroupButtons btn = new CreateGroupButtons();
var btnX = new Button();
btnX = (btn.addButton(i, btnMinimumHeightSize, Convert.ToInt16(stPanel.ActualWidth)));
btnX.Click += ClickHandlerGrp;
if (i == btnNumberCreated - 1)
{
btnX.Height = btnMinimumHeightSize + ((Convert.ToDouble(stPanel.ActualHeight) / btnMinimumHeightSize) % 1) * (btnNumberCreated);
}
stPanel.Children.Add(btnX);
}
}
private void ClickHandlerGrp(object sender, RoutedEventArgs e)
{
var button = sender as Button;
MessageBox.Show("Clicked button number: " + button.Tag);
string test = Convert.ToString(button.Tag);
switch (test)
{
case "PLUGrp":
addButtonGrp(); //this is just for test, i don't want to generate buttons this way
break;
default:
break;
}
}
}
}
Большое спасибо!