更改列不会反映在运行时
Changing columns do not reflect at runtime
我在 运行 时更改 ColumnDefinitions
时遇到问题。当我这样做时,列 Width
不会立即反映 。如果我调整当前 window/usercontrol 的大小,那么 Width
会反映出来。
我也在关注 MVVM
,我有一个 DependencyProperty
允许我根据需要在 Grid
上更改它们。
目前这是我正在使用的,如果我调整 window 的大小和/或控制 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
}
I have tried the following and none work.
grid.UpdateLayout();
grid.Refresh; // (off the parent)
当我在 运行 期间更改 ColumnDefinitions
时,我是否遗漏了什么,但它们不会立即反映出来?
我在@Mike Strobel 的帮助下找到了解决方案....
InvalidateArrange()
需要调用它来使元素的排列状态(布局)无效。在此失效之后,元素将更新其布局并异步反映。
我在 运行 时更改 ColumnDefinitions
时遇到问题。当我这样做时,列 Width
不会立即反映 。如果我调整当前 window/usercontrol 的大小,那么 Width
会反映出来。
我也在关注 MVVM
,我有一个 DependencyProperty
允许我根据需要在 Grid
上更改它们。
目前这是我正在使用的,如果我调整 window 的大小和/或控制 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
}
I have tried the following and none work.
grid.UpdateLayout();
grid.Refresh; // (off the parent)
当我在 运行 期间更改 ColumnDefinitions
时,我是否遗漏了什么,但它们不会立即反映出来?
我在@Mike Strobel 的帮助下找到了解决方案....
InvalidateArrange()
需要调用它来使元素的排列状态(布局)无效。在此失效之后,元素将更新其布局并异步反映。