Изменяющиеся столбцы не отражаются во время выполнения
У меня проблема, когда я меняю ColumnDefinitions
во время выполнения. Когда я делаю, столбцы Width
не отражается сразу. Если я изменю размер текущего окна / usercontrol, то Width
действительно отражает.
Я следую MVVM
а у меня есть DependencyProperty
что позволяет мне менять их по мере необходимости на Grid
,
В настоящее время я использую то, что я использую, если я изменю размер окна и / или управляю Grid
находится на...
public static void ColumnSpacerChanged(
DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
if (!(obj is Grid) || ((Grid)obj).ColumnDefinitions.Count == 0 || (int)e.NewValue == (int)e.OldValue)
return;
Grid grid = (Grid)obj;
for (int i = 0; i < grid.ColumnDefinitions.Count; i++)
{
if(grid.ColumnDefinitions[i].Tag != null && grid.ColumnDefinitions[i].Tag.ToString() == COLUMN_SPACER)
{
grid.ColumnDefinitions[i] = new ColumnDefinition() { Width = new GridLength((int)e.NewValue, GridUnitType.Pixel), Tag = COLUMN_SPACER };
}
}
grid.UpdateLayout(); // Tried this, but doesn't work
}
Я пробовал следующее, и ни одна из них не работает.
grid.UpdateLayout();
grid.Refresh; // (off the parent)
Есть ли что-то, чего мне не хватает, когда я меняю ColumnDefinitions
во время выполнения они сразу не отражаются?
1 ответ
Я нашел решение с некоторой помощью @Mike Strobel....
InvalidateArrange()
Это должно быть вызвано, чтобы сделать недействительным состояние расположения (макет) для элемента. После этого аннулирования элемент будет обновлен и отобразится асинхронно.