LayoutGrid SetRow и SetColumn не работают должным образом - PullRequest
1 голос
/ 26 мая 2011

У меня есть код, который создает кнопку для каждого объекта в списке.При создании каждого объекта ему присваивается имя, соответствующее строке и столбцу (т. Е. Name = row1col2).Каждая кнопка генерируется динамически, добавляется в сетку, а затем устанавливается строка / столбец.Позже мне нужно собрать данные «выбранных» кнопок, чтобы я мог выполнять действия с данными, которые они представляют.Когда я пытаюсь получить управляющие данные с кнопок, все в порядке, за исключением данных строки / столбца сетки.Он остается одинаковым для всех выбранных строк и столбцов в сетке.

Создание кнопок:

for (int i = 1; i < row.StackCount+1; i++)
{
    //create button for the column
    stackButton = new Button();
    stackButton.Height = ((newRow.Height - 2));
    stackButton.Width = ((newRow.Width / row.StackCount) - 2);
    stackButton.Background = new SolidColorBrush(Colors.White);

    //add the button border
    stackButton.BorderBrush = new SolidColorBrush(Colors.Black);
    stackButton.BorderThickness = new Thickness(1);
    stackButton.Style = Application.Current.Resources["flatButton"] as Style;

    //add the button name
    stackButton.Name = "Row" + row.LineNumber + "Col" + (i - 1).ToString();

    //add the event handler to the button
    stackButton.Click += new RoutedEventHandler(stackButton_Click);

    //add a new column
    newRow.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(newRow.Width, GridUnitType.Star) });

    //put the button into the grid
    newRow.Children.Add(stackButton); 
    Grid.SetRow(stackButton, 0);
    Grid.SetColumn(stackButton, i-1);
}

Возвращение данных кнопки обратно

g = (Grid)b.Child;
foreach (Button currentButton in g.Children)
{
    if (((SolidColorBrush)currentButton.Background).Color == Colors.Gray)
    {
        //create a stack object
        buttonData.StartDate = DateTime.Now;
        buttonData.LotNumber = LotDisplay.Text;
        buttonData.RoomID = SilverGlobals.CurrentRoom.RoomID;

        buttonData.RoomCol = Grid.GetColumn(currentButton);
        buttonData.RoomRow = Grid.GetRow(currentButton);

        buttonData.TrayCount = int.Parse(currentButton.Content.ToString());
        buttonData.Status = 0;

        //add stack object to list of stack objects
        stacks.Add(buttonData);
    }
}

Я знаю, что это должно быть что-то маленькое, что мне не хватает.У кого-нибудь есть идеи?

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Хотя комментарий во втором разделе кода гласит:

//create a stack object

вы фактически не создаете новый объект стека, поэтому он просто перезаписывает один экземпляр buttonData на каждой итерации.Значения строки и столбца, которые вы видите в конце, являются значениями последней итерации.

Чистый эффект состоит в том, что stacks является коллекцией всех одинаковых экземпляров объекта, а не коллекцией отдельных экземпляров..

0 голосов
/ 26 мая 2011

Это просто выстрел в темноте, но на основании этого вопроса и этого вопроса , может потребоваться установить свойства строки и столбца перед вы добавляете кнопку к ее родителю - примерно так:

//put the button into the grid
Grid.SetRow(stackButton, 0);
Grid.SetColumn(stackButton, i-1);
newRow.Children.Add(stackButton); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...