8天入門wpf 第三天 樣式

2021-09-23 21:04:35 字數 3602 閱讀 9983

說起樣式,大家第一反應肯定是css,好的,先上一段**。

html

ul,form

body,div,th,td,li,dd,span,p,a

h3,input

body

ulh1,h2,h4,h5,h6

imga

a:hover

我們知道css實現了內容與樣式的分離,既然wpf跟webform非常類似,那麼肯定也有一套能夠實現css的功能,是的。這就是wpf的style。

一:style類

首先我們看看style裡面有哪些東西,在vs裡面我們可以通過按f12檢視類的定義。

從上圖我們知道setters的型別是setterbasecollection,可以看得出是乙個存放setterbase的集合,setterbase派生出了兩個類

setter和eventsetter,下面我們看看setter類的定義。

估計大家想迫不及待的試一試,好了,我先做乙個簡單的demo。

xmlns=""

xmlns:x=""

xmlns:sys="clr-namespace:system;assembly=mscorlib"

title="mainwindow" height="350" width="525">

最後效果:

然後在控制項上引用一下就ok了。

xmlns=""

xmlns:x=""

xmlns:sys="clr-namespace:system;assembly=mscorlib"

title="mainwindow" height="350" width="525">

現在我們新增乙個label,如果我們也需要同樣的「背景色」和「字型」,那麼我們是否要重新寫乙個label的樣式嗎?答案肯定是否定的,聰明的你肯定會

想到」基類「。我們發現label和button都是繼承自contentcontrol,都屬於內容控制項,那麼何不在targettype中定義為contentcontrol不就ok了嗎?

我們在說setter的時候也提到了,其實targettype也就是將樣式施加到某乙個物件上,具體的也沒什麼好說的。

3:baseon

我們知道css具有「繼承和覆蓋」的特性,同樣我們的wpf中也是具有的。

<1>:繼承

xmlns=""

xmlns:x=""

xmlns:sys="clr-namespace:system;assembly=mscorlib"

title="mainwindow" height="350" width="525">

效果:

<2>:覆蓋

我們知道css遵循「就近原則」。

①:「行內」覆蓋「嵌入」,「嵌入」覆蓋「外部」

②:同級別遵循「就近」。

顧名思義,是觸發器的意思,我們可以認為是wpf在style中注入了一些很簡單,很sb的js**。

wpf中有5種trigger,都是繼承自triggerbase類。

<1> trigger,mulitrigger

我們知道js是事件驅動機制的,比如觸發mouseover,mouseout,click等事件來滿足我們要處理的邏輯,那麼wpf在不用寫c#**的情況下

用trigger就能夠簡單的滿足這些事件處理。

下面舉個例子

xmlns=""

xmlns:x=""

xmlns:sys="clr-namespace:system;assembly=mscorlib"

title="mainwindow" height="350" width="525">

最後的效果就是當ismouseover=true的情況下,button的background變成pink。

然而trigger只能滿足在單一的條件下觸發,那麼我想在多個條件同時滿足的情況下才能觸發有沒有辦法做到呢?剛好mulitrigger就可以幫你實現。

xmlns=""

xmlns:x=""

xmlns:sys="clr-namespace:system;assembly=mscorlib"

title="mainwindow" height="350" width="525">

這裡我們看到,只有滿足了ismouseover和ispressed的時候,我們的button才會變成粉色。

<2>datatrigger,multidatatrigger

這個跟上面的trigger有什麼不同呢?其實也就是datatrigger多了乙個binding的屬性,當然它的實際應用也是最廣泛的。

xmlns=""

xmlns:x=""

xmlns:sys="clr-namespace:system;assembly=mscorlib"

title="mainwindow" height="350" width="525">

效果:

當我們選中radio的時候,字型變大,同樣multidatatrigger這個多條件的使用道理也是一樣的,這裡就不介紹了。

<3>eventtrigger

這個trigger與動畫有關,目前專案中還沒接觸到,留給大家自己研究研究。

5:issealed

用於標記style是唯讀的,類似我們在c#中的seal關鍵字,來達到不允許讓繼承類使用,wpf使用seal常常在c#**裡面控制,在xaml中我們

是找不到的,有興趣的話,大家自己研究研究。

php入門第三天

三元運算和if語句。我先道歉,我最近才發現我用的wamp不是我說的那一版,我安裝wamp的時候沒刪老版的,而且安裝在了原目錄。現在發現新版的預設配置是如果變數未賦初值,就會報錯。雖然變數未賦初值改配置檔案就可以,這樣寫起來也方便,但據我的經驗,這樣做,好處比壞處少。現在在下面的二段 中加入了這兩句,...

Python入門第三天

pyhton3 第三方庫文件檢視 python m pydoc p 1234然後再瀏覽器中輸入 localhost 1234 字串 s.title 將字串的首字母大寫 s.upper 轉化為大寫 s.lower 轉化為小寫 s.swapcase 大小寫交換 s.isalnum 檢查是否全部是字母或數...

第三天 css的文字樣式

今天的學習讓我把之前學的知識進行了乙個彙總。1 關係 html是基礎,css為其增色。2 工作原理 首先瀏覽器把html和css轉換成dom 文件物件模型 把文件內容和樣式結合在一起,然後再瀏覽器上顯示dom就出現了最後的結果。3 dom 相當於一種樹形結構,每個元素 屬性 文字都相當於乙個結點,然...