利用WPF建立自适应窗口大小布局的WinForm窗口

  编写WinForm程序时,都会碰到一个问题。就是WinForm窗口在不同分辨率下的大小问题。举例说明,你编写的WinForm窗口在1024×768下是合适、匀称的。不过,如果用户的计算机的分辨率为1400×900时,你的WinForm窗口就显得偏小,其中的字体和控件都显得偏小。如果用户的分辨率为640×480,那你的窗口就远远超过它的屏幕的大小。

  如何解决这个问题?一般的WinForm程序都会这样操作:程序启动——》获取屏幕分辨率——》调整窗体的大小——》调整各个控件大小及位置——》调整各个控件的字体。这样操作比较繁琐,并且要考虑到各种分辨率的情况。这样一来,如果WinForm窗口上有若干控件,调整是一件很痛苦的事。

  有没有这样的手段。我只要调整WinForm窗口的大小,其中的各个控件大小(包括字体)自动的等比例缩放?

  还记得一些DirectX的游戏程序吗?当设定为固定的分辨率时(比如800×600),在全屏的时候,他都会自动缩放。WinForm有这样的手段吗?

  答案是肯定的。在WPF中就能很简单的实现该功能。

  利用WPF中的ViewBox容器空间。ViewBox是一个容器空间,它会自动缩放容器中的子空间以填满自身,同时它只能有一个子控件。不过,我们可以把Canvas控件作为ViewBox控件的子控件。然后在Canvas控件中布局其他的控件。

  先看看下面的窗口的Xaml文件

 

<Window x:Class="Window1"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    Title="WPFTest"     mc:Ignorable="d"     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"      SizeToContent="Manual" Width="400" Height="300">    <DockPanel  Name="DockPanel1"  LastChildFill="True">      <Menu Height="23" Name="Menu1"  DockPanel.Dock="Top">        <MenuItem Header="Menu1">          <MenuItem Header="H1" />          <MenuItem Header="H2" />        </MenuItem>          <MenuItem Header="Menu2">          <MenuItem Header="L1" />          <MenuItem Header="L2" />          <Separator />          <MenuItem Header="L4" />        </MenuItem>      </Menu>      <StatusBar Height="23" Name="StatusBar1"  DockPanel.Dock="Bottom">        <StatusBarItem Content="S1" Name="S1"/>        <StatusBarItem Content="S2" Name="S2"/>        <StatusBarItem Content="S3" Name="S3"/>      </StatusBar>      <Viewbox  Name="Viewbox1" Stretch="Fill">        <Canvas Height="200" Name="Canvas1" Width="300" Background="#FF8EDE75">          <Button Canvas.Left="43" Canvas.Top="40" Content="Button" Height="37" Name="Button1" Width="87" />        </Canvas>      </Viewbox>    </DockPanel>  </Window>

NET技术利用WPF建立自适应窗口大小布局的WinForm窗口,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。