[英]WPF: Window SizeChanged event after binding
Hello fellow programmers, 程序员大家好,
I've made a rather complicated WPF application with data bound datagrids and stuff. 我用数据绑定的数据网格和东西制作了一个相当复杂的WPF应用程序。 Since the content changes dynamically, the window itself resizes as well (as it's supposed to do). 由于内容动态变化,窗口本身也会调整大小(就像它应该做的那样)。 I made a function which aligns the window to the center of the primary screen when the size changes, like this: 我做了一个函数,当大小改变时,窗口与主屏幕的中心对齐,如下所示:
this.SizeChanged += delegate
{
double screenWidth = SystemParameters.PrimaryScreenWidth;
double screenHeight = SystemParameters.PrimaryScreenHeight;
double windowWidth = this.Width;
double windowHeight = this.Height;
this.Left = ( screenWidth / 2 ) - ( windowWidth / 2 );
this.Top = ( screenHeight / 2 ) - ( windowHeight / 2 );
};
It works like I suspected it to. 它像我怀疑的那样工作。 However, since the content is data bound, it takes roughly 1/4th a second before the content is available. 但是,由于内容是数据绑定的,因此在内容可用之前大约需要1/4秒。 The SizeChanged event above already did it's job by that time, so the window is not centered at all. 上面的SizeChanged事件已经完成了它的工作,因此窗口根本不居中。
Can i implement some sort of timeout before the event is triggered without locking everything up? 我可以在触发事件之前实现某种超时而不锁定所有内容吗?
Awaiting your responses patiently! 耐心等待你的回答!
Just a guess but one of these may work 只是一个猜测,但其中一个可能工作
this.SizeChanged += delegate
{
Dispatcher.BeginInvoke(DispatcherPriority.Background, (Action)delegate()
{
double screenWidth = SystemParameters.PrimaryScreenWidth;
double screenHeight = SystemParameters.PrimaryScreenHeight;
double windowWidth = this.Width;
double windowHeight = this.Height;
this.Left = (screenWidth / 2) - (windowWidth / 2);
this.Top = (screenHeight / 2) - (windowHeight / 2);
});
};
this.SizeChanged += delegate
{
ThreadPool.QueueUserWorkItem((o) =>
{
Thread.Sleep(100); //delay (ms)
Dispatcher.Invoke(DispatcherPriority.Background, (Action)delegate()
{
double screenWidth = SystemParameters.PrimaryScreenWidth;
double screenHeight = SystemParameters.PrimaryScreenHeight;
double windowWidth = this.Width;
double windowHeight = this.Height;
this.Left = (screenWidth / 2) - (windowWidth / 2);
this.Top = (screenHeight / 2) - (windowHeight / 2);
});
});
};
Like I said just a guess as I dont have a setup to replicate the data load delay 就像我说的那样,因为我没有设置来复制数据加载延迟
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.