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);
现在奇怪的是,每次网格高度增加时都会调用大小更改事件,但不会在网格高度减小时调用。
谢谢
使用您的代码时,我也遇到了这种情况。
因此,我将堆栈面板放在一个网格中,这种情况不再发生了。
即增加和减少时都会触发事件。
我有一个带有行定义的网格
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);
现在奇怪的是,每次网格高度增加时都会调用大小更改事件,但不会在网格高度减小时调用。
谢谢
使用您的代码时,我也遇到了这种情况。 因此,我将堆栈面板放在一个网格中,这种情况不再发生了。 即增加和减少时都会触发事件。