<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你知道WPF與WinForms的區(qū)別嗎?

          共 4482字,需瀏覽 9分鐘

           ·

          2021-04-11 23:44

          介紹

          WPF的縮寫指微軟的Windows Presentation Foundation,而WinForms是Windows Forms Applications的簡單組合。這兩個都是微軟的Windows應(yīng)用程序圖形用戶界面,開發(fā)人員可以使用它們來開發(fā)Windows桌面應(yīng)用程序。本文重點(diǎn)介紹兩種開發(fā)Windows桌面應(yīng)用程序的方法之間的主要區(qū)別,這些方法可以在現(xiàn)代系統(tǒng)開發(fā)中發(fā)揮更好的作用。

          Windows Forms

          WinForms于2002年2月作為.Net Framework的一部分引入。在很大程度上,WinForms允許開發(fā)人員在Windows窗體上拖放控件,并允許開發(fā)人員使用可以具有C#,VB.NET或任何其他.NET語言的代碼隱藏文件來操縱這些控件。每個WinForms控件都是一個類的實例,因為WinForms作為具有一組C++類的包裝器存在。Microsoft的Visual Studio使WinForms的開發(fā)更容易,因為開發(fā)人員可以輕松地從工具箱中拖放控件。

          WinForms工具箱中的控件

          在WinForms桌面應(yīng)用程序中,開發(fā)人員只能訪問他們可以在其中操縱控件事件的代碼隱藏文件。WinForms桌面應(yīng)用程序在控件的功能和應(yīng)用程序行為方面有其局限性,這將在下一部分中揭示。

          WPF桌面應(yīng)用程序

          與WinForms不同,WPF的體系結(jié)構(gòu)包含三個主要組件:a presentation framework, presentation core, and mallcore。WPF并不完全依賴于標(biāo)準(zhǔn)Windows控件,因此是一種獨(dú)立方式。2007年,Microsoft引入了Windows Presentation Foundation(WPF),以交替WinForms來進(jìn)行.Net Framework桌面應(yīng)用程序開發(fā)。這一交替帶來了桌面應(yīng)用程序開發(fā)中的許多變化。首先,WPF將設(shè)計人員和程序員分開,可以使用Visual Studio或Blend分別設(shè)計UI,而開發(fā)人員可以使用代碼隱藏文件來操縱控件事件。

          WPF使用XAML創(chuàng)建控件,其文件結(jié)構(gòu)更像ASP.NET,您可以自由使用設(shè)計器或編寫XAML代碼來創(chuàng)建控件。使用Canvas Panel的設(shè)計師仍然可以像在WinForms中一樣在Windows頁面上拖放控件。WPF帶來的主要區(qū)別是XAML文件和對XAML文件附帶的可見設(shè)計器的訪問。

          WPF可視化設(shè)計和XAML文件編輯

          上圖顯示了WPF應(yīng)用程序的布局,其中在Designer旁邊顯示了XAML文件。

          WPF項目的文件結(jié)構(gòu)如下:

          WPF項目的文件結(jié)構(gòu)
          • 每個窗口或頁面都有一個用于添加控件的.xaml文件以及一個.cs,.vb等文件,后者是代碼隱藏文件,更像是ASP.NET方式。
          • 與WinForms不同,WPF生成一個初始MainWindow來啟動應(yīng)用程序,并且要更改啟動窗口,可以在App.xaml文件中執(zhí)行此操作。
          WPF主窗體啟動配置
          • 該文件充當(dāng)應(yīng)用程序的條目。

          WPF與WinForms的其他顯著區(qū)別是控件。要添加控件,您只需要編寫簡單的XAML代碼。例如,要在WPF窗口中添加文本框,你可以寫如下代碼實現(xiàn):

          <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>

          請注意語法中的標(biāo)記,該標(biāo)記建議使用名稱“擴(kuò)展應(yīng)用程序標(biāo)記語言(XAML)”。XAML代碼放置在Window標(biāo)記中。控件標(biāo)簽可能具有描述控件寬度,高度等的屬性,具體取決于控件。

          WPF還帶來了與WinForms的另一個顯著區(qū)別,那就是可以添加帶有圖像的Button的功能。在WinForms中,向按鈕添加圖像意味著必須自己繪制圖像或包含一些第三方控件,但是WPF按鈕控件很簡單,您可以向其中添加任何內(nèi)容。

          <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運(yùn)行演示

          WPF還提供了完全受支持的數(shù)據(jù)綁定功能,如下面的示例所示:

          <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數(shù)據(jù)綁定演示

          上例中的{Binding}屬性用于將<TextBlock>中的文本綁定到txtBindTextBox中的文本。這只是說明使用{Binding}屬性在WPF中綁定數(shù)據(jù)有多么簡單。

          結(jié)論

          本文通過兩種創(chuàng)建桌面應(yīng)用程序的.NET方式之間的體系結(jié)構(gòu),語法,文件結(jié)構(gòu)以及應(yīng)用程序行為差異,展示了WinForms和WPF之間的主要差異。盡管WinForms設(shè)計看似友好和直接,但是XAML帶來了開發(fā)人員在現(xiàn)代桌面應(yīng)用程序中可能需要的一些有用功能。

          原文鏈接:https://www.c-sharpcorner.com/article/wpf-vs-winforms/







          回復(fù) 【關(guān)閉】學(xué)關(guān)
          回復(fù) 【實戰(zhàn)】獲取20套實戰(zhàn)源碼
          回復(fù) 【被刪】學(xué)
          回復(fù) 【訪客】學(xué)
          回復(fù) 【小程序】學(xué)獲取15套【入門+實戰(zhàn)+賺錢】小程序源碼
          回復(fù) 【python】學(xué)微獲取全套0基礎(chǔ)Python知識手冊
          回復(fù) 【2019】獲取2019 .NET 開發(fā)者峰會資料PPT
          回復(fù) 【加群】加入dotnet微信交流群

          人人影視字幕組涼了,這款美劇APP不能錯過!


          谷歌靈魂插件,98%的程序員都好評!


          瀏覽 101
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线观看国产色情 | 青娱乐精品一区二区三区百度在线 | 日韩无码成人三级片 | 国产精品免费一区二区六十路 | 亚洲网站视频在线观看 |