如何添加一个事件处理程序以在Window停靠到屏幕时捕获?

时间:2012-08-14 12:24:15

标签: c# wpf event-handling docking

当WindowState使用Window.StateChanged更改时,我有一个接收窗口高度和宽度的方法,但是当我使用MS Windows停靠来停靠Window时,应用程序检测到更改,运行事件处理程序,然后停靠并给我错误的窗户高度/宽度。

 private void Window_Loaded(object sender, RoutedEventArgs e) {
      Window.StateChanged += new EventHandler(Window_StateChanged);
 }

 void Window_StateChanged(object sender, EventArgs e) {
      EnvironmentalVariables.Instance.WindowHeight = Application.Current.MainWindow.Height - EnvironmentalVariables.MENUBARHEIGHT;
      EnvironmentalVariables.Instance.WindowWidth = Application.Current.MainWindow.Width - EnvironmentalVariables.TREEWIDTH - 55;
 }

手动状态更改

  • 窗口状态更改
  • Window_StateChanged()调用

使用Windows UI停靠

  • Window_StateChanged()调用
  • 窗口状态更改

如何在对接发生后使事件处理程序运行

为了说清楚,我没有使用引用的Windows Docking,我正在使用Windows 7中的操作系统对接,您可以将其拖到屏幕的一侧并为您停靠。

1 个答案:

答案 0 :(得分:1)

您是否尝试过ActualHeight \ ActualWidth?

编辑:(在此处移动答案) 在'StateChanged'之后调用'SizeChanged'事件,然后大小应该没问题 你可以更新那里的大小