要
樣式是組織和重用以上的重要工具。不是使用重復(fù)的標(biāo)記填充XAML, 通過Styles創(chuàng)建一系列封裝所有這些細(xì)節(jié)的樣式。然后通過Style屬性應(yīng)用封裝好的樣式。這點(diǎn)類似于CSS樣式。
WPF樣式也支持觸發(fā)器(trigger),當(dāng)屬性發(fā)生變化時(shí),可通過觸發(fā)器改變控件的樣式,并且可使用模板重新定義控件的內(nèi)置外觀。
正文
給所有某一類標(biāo)簽相同樣式
<Window.Resources>
<Style TargetType="{x:Type Label}">
<Setter Property="Margin" Value="10"></Setter>
<Setter Property="FontSize" Value="20"></Setter>
</Style>
</Window.Resources>
<StackPanel>
<Label Content="Label1" Background="#54B458"></Label>
<Label Content="Label2" Background="#00BED6"></Label>
<Label Content="Label3" Background="#5479F5"></Label>
<Label Content="Label4" Background="#FF9400"></Label>
<Label Content="Label5" Background="#FF4DA0"></Label>
</StackPanel>
指定xKey名
<Window.Resources>
<Style TargetType="{x:Type Label}" x:Key="LabelStyle">
<Setter Property="Margin" Value="10"></Setter>
<Setter Property="FontSize" Value="20"></Setter>
</Style>
</Window.Resources>
<StackPanel>
<Label Content="Label1" Background="#54B458" Style="{StaticResource LabelStyle}"></Label>
<Label Content="Label1" Background="AliceBlue"></Label>
</StackPanel>
樣式名稱(Key):如果不指定Key名稱,則默認(rèn)會(huì)全局引用,學(xué)過HTML的都知道,這有點(diǎn)類似于HTML中CSS的標(biāo)簽選擇器,而你指定Key后,就類似于CSS的id選擇器
Setters集合是Style類中最重要的屬性,但并非唯一屬性。Style類中共有5個(gè)重要屬性。
<Window.Resources>
<Style x:Key="BackStyle">
<Setter Property="Control.Margin" Value="10"></Setter>
<Setter Property="Control.Foreground" Value="Red"></Setter>
<Setter Property="Control.Background">
<Setter.Value>
<ImageBrush ImageSource="/user.png" TileMode="Tile" Viewport="0 0 32 32" ViewportUnits="Absolute"></ImageBrush>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<StackPanel>
<Label Content="Label6" Style="{StaticResource BackStyle}"></Label>
</StackPanel>
關(guān)聯(lián)事件處理程序
屬性設(shè)置器是所有樣式中最常見的要素,但也可以創(chuàng)建為事件關(guān)聯(lián)特定事件處理程序的EventSetter對象的集合。
<Window.Resources>
<Style x:Key="lblStyle">
<Setter Property="Control.Margin" Value="5"></Setter>
<Setter Property="Control.Padding" Value="5"></Setter>
<Setter Property="Control.Foreground" Value="Blue"></Setter>
<EventSetter Event="Control.MouseEnter" Handler="FrameworkElement_MouseEnter"></EventSetter>
<EventSetter Event="Control.MouseLeave" Handler="FrameworkElement_MouseLeave"></EventSetter>
</Style>
</Window.Resources>
<StackPanel>
<Label Content="TextBlock1" Style="{StaticResource lblStyle}"></Label>
<Label Content="TextBlock2" Style="{StaticResource lblStyle}"></Label>
<Label Content="TextBlock3" Style="{StaticResource lblStyle}"></Label>
<Label Content="TextBlock4" Style="{StaticResource lblStyle}"></Label>
<Label Content="TextBlock5" Style="{StaticResource lblStyle}"></Label>
</StackPanel>
private void FrameworkElement_MouseEnter(object sender, MouseEventArgs e)
{
((Label)sender).Background=new SolidColorBrush(Colors.Gold);
}
private void FrameworkElement_MouseLeave(object sender, MouseEventArgs e)
{
((Label)sender).Background=new SolidColorBrush(Colors.White);
}
繼承樣式
<Window.Resources>
<Style x:Key="FontStyle">
<Setter Property="Control.FontSize" Value="30"></Setter>
</Style>
<Style x:Key="lblStyle" BasedOn="{StaticResource FontStyle}">
<Setter Property="Control.Margin" Value="5"></Setter>
<Setter Property="Control.Padding" Value="5"></Setter>
<Setter Property="Control.Foreground" Value="Blue"></Setter>
<EventSetter Event="Control.MouseEnter" Handler="FrameworkElement_MouseEnter"></EventSetter>
<EventSetter Event="Control.MouseLeave" Handler="FrameworkElement_MouseLeave"></EventSetter>
</Style>
</Window.Resources>
使用類型標(biāo)記擴(kuò)展來隱式地設(shè)置鍵名
PF和WinForm技術(shù)有什么區(qū)別?哪個(gè)更加有前景?
2019-03-19
蒼狼王~
碼齡3年
1、
結(jié)果來說,屬于兩套界面渲染方式。一個(gè)是對傳統(tǒng)windows界面元素的封裝,通過gdi繪制。另一個(gè)是全新的dx渲染繪制的界面,也脫離了對傳統(tǒng)windows控件的依賴,沒有歷史包袱,理論上可以展現(xiàn)更炫酷的界面。對初級(jí)開發(fā)人員來說,沒太大區(qū)別,類似的基本設(shè)計(jì)器是他們設(shè)計(jì)界面的主要手段,一樣給事件編寫代碼。對初級(jí)以上開發(fā)人員來說,wpf需要學(xué)習(xí)xaml,有全新的ui描述語言,特別是可以通過模板的嵌套實(shí)現(xiàn)復(fù)雜的元素,通過style實(shí)現(xiàn)類似css的功能,通過比winform完善的多的數(shù)據(jù)綁定機(jī)制實(shí)現(xiàn)業(yè)務(wù)邏輯可以專心對數(shù)據(jù)而不是界面進(jìn)行開發(fā)。前途來說,兩者必定還會(huì)長期共存。深入理解winform對理解windows一些內(nèi)部機(jī)制有好處。好好學(xué)習(xí)wpf可以更方便過度到其他xaml相關(guān)技術(shù),這是微軟目前廣泛使用的技術(shù),比如接下來的windows通用應(yīng)用。
作者:知乎用戶
鏈接:https://www.zhihu.com/question/36859063/answer/69371365
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
2、
Winform本質(zhì)上就是在MFC上增加一層.Net API, 從06年開始就只有幾個(gè)人在維護(hù),基本上不增加任何新feature, 只是做bug fix. 所以,如果你要開發(fā)windows上的程序,最好不要使用Winform, 懂了這個(gè)技能也沒啥用。Win8開始,微軟用了一套新的Framework,但是跟WPF很相像,都是XAML,后面的設(shè)計(jì)思想也是基本一樣的(畢竟是同一組人設(shè)計(jì)的)所以,如果你要學(xué)Windows上界面開發(fā),WPF算是一個(gè)選擇吧另外,從實(shí)現(xiàn)上講,WinForm用的是Windows以前那一套每個(gè)控件都是一個(gè)窗口的設(shè)計(jì),而WPF本身只有一個(gè)窗口,所有控件都在這個(gè)窗口里的Visual Tree上,另外,它還可以有效利用你的GPU.
作者:cabbage
鏈接:https://www.zhihu.com/question/36859063/answer/77876774
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
3、
對于初學(xué)者來說,最直觀的印象是:winform的控件更多,但是wpf的界面可以更炫酷,更重要的是wpf對于屏幕的自適應(yīng)比winform優(yōu)秀得多。太多開發(fā)桌面程序的人由winform轉(zhuǎn)到wpf最重要的原因是winform的控件自適應(yīng)做得很差,而不同客戶公司里有不同比例的顯示器。winform還有一些其他方面讓你不爽,比如label標(biāo)簽背景不能設(shè)置為透明,以及窗口編輯視圖不能縮放,讓你感覺到很掣肘。而wpf的則給了你全面的自由,特別是學(xué)到以后的修改模板以及特效。至于數(shù)據(jù)綁定,mvvc 設(shè)計(jì)模式初學(xué)者通常感受不到它的好處的。至于說到的性能差異,通常可以忽略不計(jì)。而且wpf完全兼容winform的語法,所以越快轉(zhuǎn)越好!
作者:知乎用戶
鏈接:https://www.zhihu.com/question/36859063/answer/69381456
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
4、
你想上班 那么針對公司需求學(xué)如果只是自己寫著玩 那么區(qū)分一下1.你的程序運(yùn)行在 自己機(jī)器a.一個(gè)工具而已 要的是cooooooool 那么WPFb.一個(gè)工具而已 要的是useful easy 那么winform2.運(yùn)行在客戶機(jī)器a.客戶要求coooooool 那么wpfb.客戶要求 userful 那么winform不要談到性能 就可以忽略。 XP機(jī)器 依舊很多。記住WPF 需要大量內(nèi)存 以及CPU的代價(jià)來實(shí)現(xiàn)普通功能。記住WPF 是新的東西 需要重新上手學(xué)習(xí)記住 winform是 老的東西 win32 的那一套老生常談都可用在這里如果談前景 理論上說起來是WPF 更有前景 但是目前實(shí)際來看 WPF發(fā)展并不如預(yù)期 相反winform也并不如預(yù)期的沒落。加上 巨硬 經(jīng)常會(huì)自己打臉。
作者:Nico Chen
鏈接:https://www.zhihu.com/question/36859063/answer/128784499
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
5、做項(xiàng)目WinForm更好。雖然WPF更先進(jìn),但是好比XP比Win8更普及一樣。WinForm具有更好的客戶端性能。功能上也差不多,都能做出來。還有UWP,當(dāng)然這個(gè)更冷門。
比較有前景的是 .net Core。
6、
1、改界面winform:寫的程序如果需要改界面牽扯很大。代碼的編輯可能會(huì)導(dǎo)致更多的錯(cuò)漏出現(xiàn)而不自知。大工程改界面更甚。wpf:如果采用mvvm(model、view、viewmodel)來寫,任你界面改翻天,后臺(tái)代碼不受任何印象。2、復(fù)雜的控件winform:寫各種各樣的后臺(tái)代碼wpf:用依賴屬性、附加屬性、觸發(fā)器即可定制復(fù)雜的控件。比如顯示股票k線價(jià)格的控件3、動(dòng)畫winform:寫后臺(tái)代碼wpf:用animation的各種屬性即可4、句柄winform:一個(gè)控件一個(gè)句柄(記得是這樣,如果我記錯(cuò)了請指正)wpf:整個(gè)窗口同一個(gè)句柄5、控件自適應(yīng)winform:麻煩wpf:利用wpf的panel,就能讓控件自動(dòng)自適應(yīng)。
作者:知乎用戶
鏈接:https://www.zhihu.com/question/36859063/answer/380193324
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
7、
作者:知乎用戶
鏈接:https://www.zhihu.com/question/36859063/answer/524667474
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
winForm 使用同一套編程語言代碼完成界面的設(shè)計(jì),以及后臺(tái)的交互邏輯。你在winForm代碼中可以了解和干預(yù)圖形界面的渲染時(shí)機(jī)和細(xì)節(jié)。winForm使用傳統(tǒng)的GDI渲染圖形界面,較為中規(guī)中矩,但難以實(shí)現(xiàn)得更絢麗。winForm很成熟,有十幾年的技術(shù)積淀,但微軟已經(jīng)停止對其增加新的特性,僅在某些安全漏洞上做一些補(bǔ)丁。WPF的設(shè)計(jì)理念是圖形和邏輯完全分離,因此圖形界面的設(shè)計(jì)是通過專門的XAML代碼設(shè)計(jì)的,后臺(tái)邏輯則可以使用C#或VB編寫。你無法在WPF/XAML代碼中了解和干預(yù)圖形界面的渲染時(shí)機(jī)和細(xì)節(jié)。WPF使用DX渲染圖形界面,更接近圖形驅(qū)動(dòng)程序,效果可以非常絢麗,性能也比較好。WPF出現(xiàn)的比較晚,但也有好幾年的技術(shù)沉淀了。由于現(xiàn)階段微軟更推崇升級(jí)版的UWP,WPF本身也像winForm一樣好久沒有新的特性了。winForm適合沒有專門的圖形設(shè)計(jì)師,且不需要在圖形界面有太多要求的團(tuán)隊(duì),入手簡單。WPF適合有專門的圖形設(shè)計(jì)師,圖形界面有較高要求的團(tuán)隊(duì),相對復(fù)雜。就技術(shù)本身來說,WPF的技術(shù)更符合時(shí)代潮流,更有前景。但個(gè)人來說,了解winForm有助于理解圖形界面生成處理的細(xì)節(jié),winForm在某種程度上類似于MFC,但又不至于太底層而難懂。
8、
你如果是職業(yè)碼農(nóng),請問你學(xué)wpf做什么呢?開發(fā)桌面exe嗎?就算搞專業(yè)桌面應(yīng)用的企業(yè)也都是跨平臺(tái)方案,有幾個(gè)用wpf呢?你如果是業(yè)余碼農(nóng),為什么不用winform呢?winform簡單而且開發(fā)速度快,嫌丑的話再用donetbar之類的插件美化一下即可,最重要的是部署,xp win7基本都有net2.0的環(huán)境,直接就能跑。你能體會(huì)到寫完wpf,最后部署到xp卻發(fā)現(xiàn)客戶端上安裝net4.0裝不上的感覺嗎?補(bǔ)充下:現(xiàn)在xp電腦基本上不用考慮,但是依然不推薦wpf。速成推薦winform,深入學(xué)習(xí)推薦qt或者electron 。qt 既有常規(guī)拖控件的widgets,又有類似于前端界面的qml和webengine,程序還能跑在安卓/ios上,強(qiáng)烈推薦。
作者:燙燙屯
鏈接:https://www.zhihu.com/question/36859063/answer/80781661
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
9、
我正面回答一下題主的問題吧:其實(shí)兩個(gè)前景都不大好。WPF比Winform略好一點(diǎn)的方面是,現(xiàn)在微軟的新界面開發(fā)方式,都是用XAML,所以Siverlight,WPF,Windows Phone/Metro,學(xué)了一樣,就一通百通了,但是實(shí)質(zhì)上,都看不到有什么太光明的前景,至少在國內(nèi)是這樣的。
作者:趙科進(jìn)
鏈接:https://www.zhihu.com/question/36859063/answer/69389566
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
10、
學(xué)會(huì)XAML,5分鐘看懂DIV+CSS。
11、
當(dāng)然是各有各的好嘍。
WinFrom比較老是不追求界面,要求一般性能的首選。Wpf是新一代的Ui開發(fā)框架,適合界面要求高的,性能也沒有那么不堪,適合快速開發(fā)。所以假如想做好的話這兩者甚至是MFC都要熟悉的。這三者即可相互替代,也可相互融合。手機(jī)碼字
12、
作者:秋楓
鏈接:https://www.zhihu.com/question/36859063/answer/332638303
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
wpf的底層是DirectX,意味著你的顯示效果不僅可以更炫更酷,同時(shí)顯卡(集顯獨(dú)顯均可)提供的加速也不會(huì)拖累你的運(yùn)行速度。winform的底層是GDI/GDI+,除非你明確使用DX的接口,不然永遠(yuǎn)都是CPU在畫圖,效果沒那么炫,而且無法顯卡加速。wpf的界面設(shè)計(jì)和邏輯設(shè)計(jì)可以分離,界面設(shè)計(jì)師可以利用blend自主設(shè)計(jì)好看的界面,而不是最終讓程序員來實(shí)現(xiàn)那個(gè)復(fù)雜的動(dòng)畫或者設(shè)計(jì)。winform設(shè)計(jì)師最多拖一拖,而這往往不夠用。wpf對于數(shù)據(jù)邏輯、業(yè)務(wù)邏輯、顯示邏輯進(jìn)行了解耦和,可以讓不同部門協(xié)同工作更舒服一些,winform多少有一些攪在一起
天有個(gè)想法想驗(yàn)證一下,但是感覺項(xiàng)目組web前臺(tái),后臺(tái)這樣開發(fā),再聯(lián)調(diào)效率有點(diǎn)低。
因此,想回歸到原始的windows窗口程序,簡單直接。
一直都很懷念當(dāng)年的delphi,開發(fā)速度,尤其是開發(fā)界面速度不要太快!
delphi沒落了后,開始用VS,Visual studio,不是現(xiàn)在前端開發(fā)用的vs code。
下載了第三方的demo后,發(fā)現(xiàn)vs2022中,無法將一個(gè)按鈕等控件拖動(dòng)到窗體上,這不扯嗎,找原因沒找到。
vs2022卸載了,裝vs2015,又發(fā)現(xiàn)安裝不是,老是找不到包,以前可不這樣,一路next就安裝下去了。難不成。。。
又回到vs2022,通過網(wǎng)絡(luò)安裝,安裝上來,再打開,居然可以了。。。以前按鈕,控件都是灰的,無法拖動(dòng)上去。
都是界面控件可視化設(shè)計(jì)操作,怎么有點(diǎn)不一樣呢,沒有以前絲滑了。
一看,程序文件是XAML文件,打開一看,能看明白,是xml格式的控件描述。
直接用winforms多好,簡單(不粗暴)。
既然第一次遇到,那就徹底搞明白。
WPF(Windows Presentation Foundation)是由微軟開發(fā)的桌面應(yīng)用程序框架,用于創(chuàng)建現(xiàn)代化、高度交互和具有視覺吸引力的用戶界面。它是 .NET Framework 的一部分,提供了一種基于 XAML(Extensible Application Markup Language)語言的聲明性編程模型,可以很容易地創(chuàng)建動(dòng)態(tài)、靈活的用戶界面,并且可以與其他 .NET 技術(shù)無縫集成。WPF 還具有強(qiáng)大的數(shù)據(jù)綁定和可重用性,使開發(fā)人員可以更快地構(gòu)建和維護(hù)應(yīng)用程序。WPF 也支持硬件加速和高分辨率顯示,為用戶帶來更好的體驗(yàn)。
WPF(Windows Presentation Foundation)和 WinForms(Windows Forms)都是用于創(chuàng)建 Windows 桌面應(yīng)用程序的框架,但它們有一些重要的區(qū)別:
Extensible Application Markup Language (Extensible Application Markup Language, XAML) 是一種聲明性語言。 具體來講,XAML 可初始化對象和設(shè)置對象的屬性,使用一種可顯示多個(gè)對象間分層關(guān)系的語言結(jié)構(gòu),還使用了一種支持類型擴(kuò)展的支持類型約定。
使用 WPF 時(shí)首先遇到的事情之一是 XAML。XAML 代表可擴(kuò)展應(yīng)用程序標(biāo)記語言,一種基于 XML 的簡單的聲明性語言,是微軟用于描述 GUI 的 XML 變種。在之前的 GUI 框架如 WinForms 中,GUI 是用相同語言創(chuàng)建,例如 C# 或 VB.NET ,并且通常由設(shè)計(jì)者來維護(hù)。但是,通過 XAML,微軟使用了另一種方式。非常類似HTML,你現(xiàn)在能輕松編寫你的GUI。
通用 Windows 平臺(tái) (UWP),可以生成適用于任何 Windows 設(shè)備(電腦、Xbox One、HoloLens 等等)的應(yīng)用,然后將這些應(yīng)用發(fā)布到 Store。
*請認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。