|
編寫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窗口,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。