居間
wpf 的縮寫指微軟的 windows presentation foundation,而 winforms 是 windows forms applications 的簡單組合。這兩個都是微軟的 windows 應用程式圖形用戶界面,開發人員可以使用它們來開發 windows 桌面應用程式。本文重點居間兩種開發 windows 桌面應用程式的方法之間的主要區別,這些方法可以在現代系統開發中發揮更好的作用。
Windows Forms
winforms 於 2002 年 2 月作為.net framework 的一部分引入。在很大程度上,winforms 允許開發人員在 windows 窗體上拖放控制項,並允許開發人員使用可以具有 c#,vb.net 或任何其他.net 語言的代碼隱藏文件來操縱這些控制項。每個 winforms 控制項都是一個類的實例,因為 winforms 作為具有一組 c++類的包裝器存在。microsoft 的 visual studio 使 winforms 的開發更容易,因為開發人員可以輕鬆地從工具箱中拖放控制項。
winforms 工具箱中的控制項:

在 winforms 桌面應用程式中,開發人員只能訪問他們可以在其中操縱控制項事件的代碼隱藏文件。winforms 桌面應用程式在控制項的功能和應用程式行為方面有其局限性,這將在下一部分中揭示。
wpf 桌面應用程式
與 winforms 不同,wpf 的體系結構包含三個主要組件:a presentation framework, presentation core, and mallcore。wpf 並不完全依賴於標準 windows 控制項,因此是一種獨立方式。2007 年,microsoft 引入了 windows presentation foundation(wpf),以交替 winforms 來進行.net framework 桌面應用程式開發。這一交替帶來了桌面應用程式開發中的許多變化。首先,wpf 將設計人員和程式設計師分開,可以使用 visual studio 或 blend 分別設計 ui,而開發人員可以使用代碼隱藏文件來操縱控制項事件。
wpf 使用 xaml 創建控制項,其文件結構更像 asp.net,您可以自由使用設計器或編寫 xaml 代碼來創建控制項。使用 canvas panel 的設計師仍然可以像在 winforms 中一樣在 windows 頁面上拖放控制項。wpf 帶來的主要區別是 xaml 文件和對 xaml 文件附帶的可見設計器的訪問。
wpf 可視化設計和 xaml 文件編輯:

上圖顯示了 wpf 應用程式的布局,其中在 designer 旁邊顯示了 xaml 文件。
wpf 項目的文件結構如下:

- 每個窗口或頁面都有一個用於添加控制項的.xaml 文件以及一個.cs,.vb 等文件,後者是代碼隱藏文件,更像是 asp.net 方式。
- 與 winforms 不同,wpf 生成一個初始 mainwindow 來啟動應用程式,並且要更改啟動窗口,可以在 app.xaml 文件中執行此操作。
wpf 主窗體啟動配置:

- 該文件充當應用程式的條目。
wpf 與 winforms 的其他顯著區別是控制項。要添加控制項,您只需要編寫簡單的 xaml 代碼。例如,要在 wpf 窗口中添加文本框,你可以寫如下代碼實現:
<Window
x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow"
Height="450"
Width="800"
>
<StackPanel>
<TextBox></TextBox>
</StackPanel>
</Window>
請注意語法中的標記,該標記建議使用名稱“擴展應用程式標記語言(xaml)”。xaml 代碼放置在 window 標記中。控制項標籤可能具有描述控制項寬度,高度等的屬性,具體取決於控制項。
wpf 還帶來了與 winforms 的另一個顯著區別,那就是可以添加帶有圖像的 button 的功能。在 winforms 中,向按鈕添加圖像意味著必須自己繪製圖像或包含一些第三方控制項,但是 wpf 按鈕控制項很簡單,您可以向其中添加任何內容。
<Window
x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow"
Height="500"
Width="800"
>
<button Padding="5">
<StackPanel Orientation="Horizontal">
<image Source="/Image.jpg" Height="25" Width="50" />
<TextBlock Margin="5,0">I'm a Button</TextBlock>
</StackPanel>
</button>
</Window>
輸出如下所示:wpf 運行演示

wpf 還提供了完全受支持的數據綁定功能,如下面的示例所示:
<Window
x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow"
Height="500"
Width="800"
>
<StackPanel Margin="10">
<WrapPanel Margin="0,10">
<label Content="Your Text Here:" FontWeight="Bold" />
<TextBox
Name="txtBind"
Height="20"
Width="250"
RenderTransformOrigin="-2.75,0.587"
Margin="59,0,336,0"
/>
</WrapPanel>
<WrapPanel Margin="0,10">
<TextBlock Text="Bound-Text: " FontWeight="Bold" />
<TextBlock Text="{Binding Path=Text, ElementName=txtBind}" />
</WrapPanel>
</StackPanel>
</Window>
輸出:wpf 數據綁定演示

上例中的屬性用於將<textblock>中的文本綁定到 txtbindtextbox 中的文本。這只是說明使用屬性在 wpf 中綁定數據有多麼簡單。
結論
本文通過兩種創建桌面應用程式的.net 方式之間的體系結構,語法,文件結構以及應用程式行為差異,展示了 winforms 和 wpf 之間的主要差異。儘管 winforms 設計看似友好和直接,但是 xaml 帶來了開發人員在現代桌面應用程式中可能需要的一些有用功能。
原文連結:https://www.c-sharpcorner.com/article/wpf-vs-winforms/