【问题标题】:Ensuring WPF Window is inside screen bounds确保 WPF 窗口在屏幕范围内
【发布时间】:2010-04-13 22:56:52
【问题描述】:

我在应用程序启动时恢复 Window 的坐标。在旧的 Windows-Forms 中,我使用了 System.Windows.Forms.Screen 集合。 WPF 世界里有没有类似的东西?

我确实注意到System.Windows.SystemParameters 中的PrimaryScreen*VirtualScreen* 参数。然而,他们让我悬而未决,因为在监视器大小不同的情况下,似乎无法检测到 Window 是否在边界内。

【问题讨论】:

    标签: wpf


    【解决方案1】:

    System.Windows.Forms.Screen 在 WPF 中工作得非常好,所以我认为 WPF 的设计者认为用 WPF 特定版本替换它没有优势。

    当然,您必须进行坐标转换。这是一个简单的类来进行转换:

    public class ScreenBoundsConverter
    {
      private Matrix _transform;
    
      public ScreenBoundsConverter(Visual visual)
      {
        _transform =
          PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;
      }
    
      public Rect ConvertBounds(Rectangle bounds)
      {
        var result = new Rect(bounds.X, bounds.Y, bounds.Width, bounds.Height);
        result.Transform(_transform);
        return result;
      }
    }
    

    示例用法:

    var converter = new ScreenBoundsConverter(this);
    
    foreach(var screen in System.Windows.Forms.Screen.AllScreens)
    {
      Rect bounds = converter.ConvertBounds(screen.Bounds);
      ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 2013-01-26
      相关资源
      最近更新 更多