2015-08-13 2 views
0

У меня есть стандартный WPF сетка с некоторыми элементами Пограничных в некоторых клетках (которые, в свою очередь, содержат некоторое содержание.Как изменить размер дочернего элемента сетки после изменения rowspan?

Мне нужно, чтобы изменить некоторые из них во время выполнения, поэтому я процедурно установка RowSpan указанных элементов, как это:

int span = Grid.GetRowSpan(cell); 
Grid.SetRowSpan(cell, ++span); 

Я проверил, что пролет на самом деле получить набор, но проблема в том, что элемент Border остается один и тот же размер и переход к вертикальному центру пролета, например, когда пролет 2. , он плавает между двумя строками.Как я могу вызвать изменение размера элемента? Я пытался вызвать InvalidateArrange(), InvalidateMeasure(), а также InvalidateVisual(), но ни одно из них не повлияло на ny изменение.

+0

Я не вижу функцию ['SetRowSpan'] (https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.grid.setrowspan.aspx), которая принимает только параметр 'int', вы можете опубликовать полный код, включая любое добавление строк в' Grid' и xaml. – SwDevMan81

+0

@ SwDevMan81 Извините, я отредактировал. Я передаю элемент в качестве первого параметра, я ошибся в этом сообщении. Полный код для создания сетки длительный, есть ли особенно важная часть, которая, по вашему мнению, может быть неправильной? Я добавляю элементы со стандартными Grid.SetRow(), Grid.SetColumn() и т. Д. – amnesia

ответ

0

Вам необходимо установить свойство VerticalAlignment на ваш Border элемент на VerticalAlignment.Stretch, чтобы он простирался внутри доступного пространства в вашем Grid.

+0

Я надеялся, что это будет так просто, но, к сожалению, это не сработало. Спасибо за предложение. – amnesia

+0

'Stretch' - выравнивание по умолчанию' Control' (если вы не указали какой-либо). @amnesia, можете ли вы предоставить больше кода (xaml, где вы определяете эту сетку) и снимок экрана (чтобы проиллюстрировать проблему)? – Sinatr

0

Ничего, я выяснил свою ошибку - грузовое культовое программирование. Я использую Adorner, чтобы позволить пользователю изменить размер содержимого ячейки, и туманно следующий пример MSDN, и мой Adorner содержал следующее во время инициализации:

 if (_cell.Width.Equals(Double.NaN)) 
      _cell.Width = _cell.RenderSize.Width; 
     if (_cell.Height.Equals(Double.NaN)) 
      _cell.Height = _cell.RenderSize.Height; 

Это устанавливает ширину и высоту, чтобы явное изменение размера. Я неправильно понял, что это фактически помешало бы родителям определять размер элемента.

Смежные вопросы