如果C#中的窗口大小发生变化,如何调用方法

时间:2019-06-05 12:35:43

标签: c# wpf user-interface event-handling

虽然我对事件处理程序有所了解,但对如何强制使用事件处理程序还不够了解。

所以问题是:如何调用我的方法

redrawWidgets();

是否无需每次都手动检查主窗口是否更改大小?

请注意,我没有使用XAML,而是手动编写了GUI,因为我愚蠢地开始了这个项目。下一个我将明确使用XAML。

我的mainWindow如下所示:

using AlgorithmComparer.src.View.Main;
using System.Windows;
using AlgorithmComparer.src.Model;
using System.Collections.Generic;
using System;
using System.Windows.Threading;

namespace AlgorithmComparer.src.View
{
    public class MainWindow : Window, IView
    {
        ControllerClass _controller;

        private AlgorithmRuntimeView _leftAlgorithmRuntimeView;
        private AlgorithmRuntimeView _rightAlgorithmRuntimeView;
        public MainWindow(ControllerClass controller, AlgorithmRuntimeView leftAlgorithmRuntimeView, AlgorithmRuntimeView rightAlgorithmRuntimeView)
        {
            this._leftAlgorithmRuntimeView = leftAlgorithmRuntimeView;
            this._rightAlgorithmRuntimeView = rightAlgorithmRuntimeView;
            this._controller = controller;
            Title = "Algorithm Comparer";
            Height = 530;
            Width = 800;
            InitLayout();
        }

        public void InitLayout()
        {
            Content = new MainView(_controller, _leftAlgorithmRuntimeView, _rightAlgorithmRuntimeView);
        }

        public int[] getWindowSize()
        {
            return (new int[2] { (int)this.ActualHeight, (int)this.ActualWidth });
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您不需要自己调用此方法。 Window类已经通过SizeChanged事件为您提供了此功能。您可以使用以下代码来利用它:

    YourWindow.SizeChanged += functionName;
    //If you are in your code behind use:
    //this.SizeChanged += functionName;

    private void functionName(object sender, SizeChangedEventArgs e)
    {
        //do what you want to do if size changed 
    }

答案 1 :(得分:1)

在窗口的构造函数中,您可以连接到SizeChanged事件:

SizeChanged += window_SizeChanged;

您将获得一个处理程序方法,可以进行调用。请注意:每当大小更改,更改以及任何原因更改时,此操作都会非常迅速地触发。例如,它会在启动时触发,因为首先要调整窗口的大小。在最小化,最大化,边缘拖动...一切上。