WPF 网格大小仅在增加而不是减少时更改事件触发

WPF grid size changed event firing only when increasing and not when decreasing

我有一个带有行定义的网格

RowDefinition rd0 = new RowDefinition();
rd0.Height = new GridLength(1, GridUnitType.Auto);
RowDefinition rd1 = new RowDefinition();
rd1.Height = new GridLength(1, GridUnitType.Star);
RowDefinition rd2 = new RowDefinition();
rd2.Height = new GridLength(1, GridUnitType.Auto);
grdMain.RowDefinitions.Add(rd0);
grdMain.GetGrdPlugins().RowDefinitions.Add(rd1);
grdMain.GetGrdPlugins().RowDefinitions.Add(rd2);

现在我在第一行添加一个文本块

var tbxTitle = new TextBlock(){};
Grid.SetRow(tbxTitle, 0);
grdMain.Children.Add(tbxTitle);

在第三个按钮堆栈面板中

StackPanel spButtons = new StackPanel() { Orientation = Orientation.Horizontal, HorizontalAlignment = HorizontalAlignment.Center, };
grdMain.Children.Add(spButtons);
Grid.SetRow(spButtons, 2);
...

第二个是堆栈面板。

现在我想要在网格大小发生变化时调用一个事件:

var spMatrix_Volatile = new StackPanel() { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Stretch, Background = Brushes.RosyBrown};
spMatrix_Volatile.SizeChanged += (sender, args) =>
{
    Console.Beep();
    double dHeight = spMatrix_Volatile.ActualHeight;
    CreateCellMatrix(out strResult, ref spMatrix_Volatile, false, dHeight);
};

Grid.SetRow(spMatrix_Volatile, 1);
grdMain.Children.Add(spMatrix_Volatile);

现在奇怪的是,每次网格高度增加时都会调用大小更改事件,但不会在网格高度减小时调用。

谢谢

使用您的代码时,我也遇到了这种情况。 因此,我将堆栈面板放在一个网格中,这种情况不再发生了。 即增加和减少时都会触发事件。