? ? ? ? WPF:? Window Presentation Foundation. WPF與WinForms的對比如下:
特性 | WinForms | WPF |
---|---|---|
技術基礎 | 基于傳統的GDI+(圖形設備接口) | 基于DirectX,支持硬件加速的矢量渲染 |
UI設計方式 | 拖拽控件+事件驅動代碼(簡單但局限) | XAML(聲明式UI)+ MVVM模式(解耦邏輯與UI) |
布局系統 | 固定像素布局(缺乏靈活性) | 強大的布局系統(自適應、流式布局) |
數據綁定 | 簡單數據綁定(功能有限) | 強大的雙向綁定、數據模板、依賴屬性 |
圖形能力 | 基礎2D圖形(適合簡單界面) | 支持2D/3D、動畫、矢量圖形、復雜視覺效果 |
學習曲線 | 入門簡單(適合快速開發) | 學習成本較高(需掌握XAML、MVVM等) |
跨平臺兼容性 | 僅限Windows | 僅限Windows(但可通過Avalonia等框架擴展) |
WPF適合:
-
開發現代化、高交互性桌面應用(如數據可視化、工業控制界面)。
-
需要復雜UI動畫、主題定制或響應式布局的項目。
-
長期維護的項目(MVVM模式更易解耦和擴展)
-
除非有明確的WinForms維護需求,否則WPF更符合技術趨勢,且其設計理念對后續技術遷移(如前端框架)有啟發。
一、布局介紹
布局面板 | 說明 |
Canvas? ? ? ? | 允許以任何方式放置子控件。不會對子控件位置施加任何控制 |
DockPanel? ? ? ? | 子控件緊貼四條邊中的任意一邊。最后一個控件則充滿剩余區域 |
Grid???????????????? | 可分為若干行與若干列 |
StackPanel???????? | 沿水平方向或者垂直方向進行排列 |
WrapPanel???????? | 也是沿著水平或者豎直排列,但是以多行多列方式排行。 |
1.Grid可以分成幾行幾列(行列的高度或寬度可以指定具體尺寸,也可以使用比例(1*,2*,下邊表示第3行比第4行高一倍)
? ? Grid可以嵌套Grid,或者其他控件比如stackpanel
? ???<Grid.RowDefinitions>
? ? ?<RowDefinition Height="20"/>
? ? ?<RowDefinition Height="100"/>
? ? ?<RowDefinition Height="2*"/>
? ? ?<RowDefinition Height="1*"/>
?</Grid.RowDefinitions>
2. stackpanel
????????可以橫向(Orientation="Horizontal")或者縱向(Orientation="Vertical")排列其中的控件。????????
3. button, 文本內容是Content(與winform不同)
二、實際例子如下:
<Grid ShowGridLines="true"><Grid.RowDefinitions><RowDefinition Height="20"/><RowDefinition Height="100"/><RowDefinition Height="2*"/><RowDefinition Height="1*"/></Grid.RowDefinitions><Button x:Name="btnFile" Content="文件" Height="20" Width="50" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="0" Margin="0,0,0,0 " Click="btnFile_Click"/><Button Content="編輯" Height="20" Width="50" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="0" Margin="50,0,0,0 "/><Button Content="視圖" Height="20" Width="50" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="0" Margin="100,0,0,0 "/><Button Content="項目" Height="20" Width="50" HorizontalAlignment="Left" Grid.Column="0" Grid.Row="0" Margin="150,0,0,0 "/><StackPanel Grid.Row="1" Grid.Column="0"><Button Content="按鈕3" Height="50" Width="50" HorizontalAlignment="Left"/><Button Content="按鈕4" Height="50" Width="50" HorizontalAlignment="Left"/></StackPanel><StackPanel Grid.Row="2" Grid.Column="0" Orientation="Horizontal"><Button Content="按鈕5" VerticalAlignment="Top" Height="30" Width="50" HorizontalAlignment="Left"/><Button Content="按鈕6" VerticalAlignment="Center" Height="30" Width="50" HorizontalAlignment="Left"/><Button Content="按鈕7" VerticalAlignment="Bottom" Height="30" Width="50" HorizontalAlignment="Left"/></StackPanel><Grid Grid.Row="3" Grid.Column="0"><Grid.ColumnDefinitions><ColumnDefinition Width="70"/><ColumnDefinition /></Grid.ColumnDefinitions><StackPanel Grid.Column="0"><Button Content="按鈕8" Height="20"/><Button Content="按鈕9" Height="20"/></StackPanel><StackPanel Grid.Column="1"><Button Content="按鈕10" Height="20" Width="70"/><Button Content="按鈕11" Height="20" Width="70"/></StackPanel></Grid> </Grid>