【问题标题】:How to determine the screen width/height using C#如何使用 C# 确定屏幕宽度/高度
【发布时间】:2011-06-08 11:17:05
【问题描述】:

我想根据用户屏幕的最大宽度/高度动态设置Window 的宽度和高度。如何以编程方式确定这一点?

【问题讨论】:

  • 最大化你的窗口是不可接受的吗?
  • @Lazarus:不,不是我要处理的案子。

标签: c# wpf screen css


【解决方案1】:

对于主屏幕:

System.Windows.SystemParameters.PrimaryScreenWidth
System.Windows.SystemParameters.PrimaryScreenHeight

(请注意,还有一些其他与主屏幕相关的属性取决于各种因素,Full* & Maximised*)

虚拟屏幕:

SystemParameters.VirtualScreenWidth
SystemParameters.VirtualScreenHeight

【讨论】:

  • 根据当前分辨率呢?如何获得?
  • 我认为这确实使用了当前的分辨率,你试过了吗?
  • 这个问题终于有答案了!当应用程序打开时用户更改缩放比例时,VirtualScreenWidth[Height] 是否不会更新?在 Win10 上,您似乎必须重新启动应用程序才能重新填充这些值。
  • @Hashman:不能告诉你任何事情,甚至没有 win 10 设置。
【解决方案2】:

如果您想要运行程序的监视器的特定尺寸(如果有人运行多个监视器),您也可以使用:

var helper = new WindowInteropHelper(this); //this being the wpf form 
var currentScreen = Screen.FromHandle(helper.Handle);

这将返回一个屏幕对象,该对象引用正在运行程序的监视器。从那里您可以使用currentScreen.Bounds.Width / Height 属性(全尺寸)或currentScreen.WorkingArea.Width / Height(减去任务栏等),具体取决于您想要什么。

【讨论】:

    【解决方案3】:

    使用屏幕对象

    Screen.PrimaryScreen.Bounds.Width
    

    【讨论】:

      【解决方案4】:

      您可以使用SizeChanged 事件

      SizeChanged="MyWindow_SizeChanged"
      

      然后在您的事件处理程序中,

      private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
      {
          if (this.MinWidth > 0 && this.MinHeight > 0)
          {
              double heightScaleFactor = e.NewSize.Height / this.MinHeight;
              double widthScaleFactor = e.NewSize.Width / this.MinWidth;            
              mainGrid.LayoutTransform = new ScaleTransform(heightScaleFactor, widthScaleFactor);
          }
      }
      

      其中MainGridMyWindow 中所有内容的容器。

      【讨论】:

      • 不确定这是如何解决这个问题的。
      • 这是一个有效的帖子,但正如 Lazarus 所提到的......“它没有解决问题”:)
      【解决方案5】:

      当从 Ranorex Studio 8.0.1+git.8a3e1a6f 调用时,我无法在 .NET 4.0.30319.42000 和 Windows 10 Enterprise 下使用上述任何解决方案,所以我使用了该行

      using WinForms = System.Windows.Forms;
      […]
                      SetWindowPos(processes[0].MainWindowHandle,
                          0,
                          y,
                          x,
                          WinForms.SystemInformation.PrimaryMonitorSize.Width,
                          WinForms.SystemInformation.PrimaryMonitorSize.Height,
                          SWP.SHOWWINDOW);
      

      【讨论】:

        【解决方案6】:

        可以获取屏幕的高度和宽度:

        int height = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Height;
        int width = System.Windows.Forms.SystemInformation.PrimaryMonitorSize.Width;
        

        然后将 Window 的 HeightWidth 属性设置为 Initialization 中的属性。

        this.Height = height;
        this.Width = width;
        

        用于在 WinForms 或 ASP .NET 中获取屏幕的高度和宽度。没有麻烦,没有大惊小怪,除非你需要在你的项目中引用 System.Windows.Forms 程序集,如果它不是一个 WinForm 项目。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-03-17
          • 2015-07-05
          • 2012-11-01
          • 2011-09-09
          • 1970-01-01
          • 1970-01-01
          • 2011-09-25
          相关资源
          最近更新 更多