WPF表单大小已由用户更改,但未由程序

时间:2016-08-14 16:49:47

标签: c# wpf event-handling

我想在停用时更改表单的大小(单击它)并在激活时重置它(单击返回)。要重置它,我有一个名为preferredHeight和preferredWidth的全局变量,我在MainForm_SizeChanged中设置(如果用户手动调整表单大小,则为该值)。但是,当我设置新的高度和宽度时,会调用SizeChanged方法!有没有办法区分用户是否触发了SizeChanged事件或者我的程序是否触发了?或者,有没有更好的方法来重置我的表单的大小?谢谢!

    private void MainForm_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        preferredHeight = MainForm.Height;
        preferredWidth = MainForm.Width;
    }

    private void MainForm_Deactivated(object sender, EventArgs e)
    {
        MainGrid.RowDefinitions[3].Height = new GridLength(0);
        MainGrid.RowDefinitions[4].Height = new GridLength(0);
        MainForm.ResizeMode = ResizeMode.NoResize;
        MainForm.Height = 100;
        MainForm.Width = 100 * imageWidth / imageHeight;
    }

    private void MainForm_Activated(object sender, EventArgs e)
    {
        MainGrid.RowDefinitions[3].Height = new GridLength(1, GridUnitType.Star);
        MainGrid.RowDefinitions[4].Height = new GridLength(2, GridUnitType.Star);
        MainForm.ResizeMode = ResizeMode.CanResize;
        MainForm.Width = preferredWidth;
        MainForm.Height = preferredHeight;
    }

1 个答案:

答案 0 :(得分:1)

如果用户更改了表单的大小,则表单仍然具有焦点。

如果用户点击表单,则表单将失去焦点。

因此,您可以检查表单是否仍具有焦点。如果它有,那么用户调整大小,如果没有那么这是你的“停用”调整大小,这是调用。