WPF有没有办法在SizeChanged事件中获得以前的LOCATION?

时间:2016-12-15 13:57:39

标签: c# wpf

在WPF窗口中, SizeChanged 事件提供Rmisc,它在调整大小之前包含窗口大小:

e.PreviousSize

有时,例如,通过拖动窗口的顶部边框来调整大小,更改Window Location ,所以我想在调整大小之前获得窗口位置,如下所示:

private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
    var previousWidth = e.PreviousSize.Width;

你有什么好主意吗? THX。

1 个答案:

答案 0 :(得分:0)

没有属性可以返回上一个窗口位置,因此您必须以某种方式自己跟踪它。例如,您可以处理窗口的LocationChanged事件并跟踪队列中的位置,然后在SizeChanged事件处理程序中检查这些位置。像这样:

public partial class Window1 : Window
{
    Queue<Point> _locations = new Queue<Point>();
    public Window1()
    {
        InitializeComponent();
        _locations.Enqueue(new Point(this.Left, this.Top));
        LocationChanged += (s, e) => _locations.Enqueue(new Point(this.Left, this.Top)); ;

        SizeChanged += (s, e) => 
        {
            if(IsLoaded)
            {
                Point lastPosition = _locations.Dequeue();
                while (lastPosition.X == this.Left && lastPosition.Y == this.Top && _locations.Count > 0)
                    lastPosition = _locations.Dequeue();

                if (_locations.Count == 0)
                    _locations.Enqueue(lastPosition);                    

                //...
            }
        };
    }
 }