У меня есть настраиваемый GridView как элемент управления из панели Grid с несколькими элементами управления в каждой строке (все они из System.Windows.Controls).Binding Height from code
Пользователь запросил, чтобы высота строки неограниченно увеличивалась с содержимым элемента управления. У меня проблема с сохранением размера всех элементов управления в каждой строке по отношению к самой высокой.
Я пытаюсь в одностороннем порядке связать высоту всех элементов управления в каждой строке с свойством RowDefenition ActualHeight. но он не работает, как я ожидаю, что он будет работать (каждый элемент управления сохраняет свой собственный размер до минимума)
Любая помощь будет оценена, спасибо.
Вот код, где я пытаюсь связать:
RowDefinition rowDef = new RowDefinition();
cellsGrid.RowDefinitions.Add(rowDef);
rowDef.Name = "gvRow" + cellsGrid.RowDefinitions.Count;
cellsGrid.Children.Add(controlToAdd);
Grid.SetRow(controlToAdd, rowIndex);
Grid.SetColumn(controlToAdd, columnIndex);
Binding bindH = new Binding("ActualHeight");
bindH.Mode = BindingMode.OneWay;
bindH.Source = rowDef;
BindingOperations.SetBinding(controlToAdd,RowDefinition.HeightProperty, bindH);
controlToAdd.TabIndex = (totalTabIndex + 1); totalTabIndex++;
cell.CellElement = controlToAdd;
cell.EndEdit += new GridViewCell.GridViewEditHandler(cell_EndEdit);
Попробуйте установить 'VerticalAlignment' вашего элемента управления' 'Stretch', поэтому он расширяется, чтобы заполнить все свободное пространство. Кроме того, я не думаю, что у 'RowDefinition' есть свойство ActualHeight', что привязка, вероятно, не оценивает ничего. Вам нужно привязать к «ActualHeight» вашего контроля, но это значение не известно, пока оно не будет показано. Я полагаю, вы могли бы использовать 'Dispatcher.Invoke' для запуска чего-то после визуализации элементов управления, выяснить, какой из них является самым высоким элементом в строке, и установить для всех элементов эту высоту. – Rachel
Большое спасибо, поэтому теперь я привязываю высоту элементов управления только после того, как сетка была обработана, и все работает отлично. –
Рад, что сработал :) Я отправил его в качестве ответа, чтобы вы могли принять – Rachel