日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【转】WPF中关于样式和模板的区别

發布時間:2023/12/10 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】WPF中关于样式和模板的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.WPF樣式
類似于Web應用程序中的CSS,在WPF中可以為控件定義統一的樣式(Style)。樣式屬于資源的一種,例如為Button定義統一的背景顏色和字體:
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Background" Value="Yellow" />
</Style>
</Window.Resources>
<StackPanel>
<Button>Button A</Button>
</StackPanel>
在Style中定義的屬性及值,影響到Window中的所有類型為Button的控件的樣式
這種樣式,類似于CSS中的類型選擇器,為某種類型定義樣式。
此外還可以在Style中加入x:Key屬性,做為特定的樣式(注意,這種也需要定義TargetType);
在第一個樣式的基礎上創建一個新樣式可以達到這一目的,如下所示:<Window.Resources>
<Style x:Key="BigFontButtonStyle">
<Setter Property="Control.FontFamily" Value="Times New Roman" />
<Setter Property="Control.FontSize" Value="18" />
<Setter Property="Control.FontWeight" Value="Bold" />
</Style>
<Style x:Key="EmphasizedBigFontButtonStyle" BasedOn="{StaticResource BigFontButtonStyle}">
<Setter Property="Control.Foreground" Value="White" />
<Setter Property="Control.Background" Value="DarkBlue" />
</Style>
</Window.Resources>
以編程方式設置樣式,若要以編程方式向元素分配命名樣式,請從資源集合中獲取該樣式,然后將其分配給元素的 Style 屬性。請注意,資源集合中的項是 Object
類型,因此,將檢索到的樣式分配給 Style 屬性之前,必須將該樣式強制轉換為 Style。例如,若要對名為 textblock1 的
TextBlock 設置定義的 TitleText 樣式,請執行以下操作:
textblock1.style=(style)Resources["TitleText"];
請注意,樣式一旦應用,便會密封并且無法更改。如果要動態更改已應用的樣式,必須創建一個新樣式來替換現有樣式。
2.wpf模板
當一個控件的外觀不滿足要求的時候,我們可以使用“控件模板”的方式更改控件的外觀,WPF中的所有控件,只要有視覺外觀,
就會有Template
property,且將此property的值設定為一個ControlTemplate對象。Button之所以看起來像Button就是因為受到了
ControlTemplate對象的直接影響。ControlTemplate對象定義了控件的完整外觀,且你可以替換此對象。

抽象的FrameworkTemplate類型只定義了三個property。只讀的Boolean
property用來標識此模板是否可以被修改。Resources
property的類型是ResourceDictionary,讓我們定義一些只能夠在模板內部使用的資源。第三個property最重要,叫做
visualTree,定義組成此控件外觀的Element的layout。
ControlTemplate類型多加了兩個property定義:TargetType用來指明,哪個類型的控件,適合應用到該模板;Triggers是Trigger對象的collection。

所有派生自ContentControl的類型都使用ContentPresenter類型的對象來顯示它們的內容。ContentPresenter派
生自FrameworkElement,你可以在模板的視覺樹內包含一個ContentPresenter對象,用來盛放模板中要放置的內容。
ContentPresenter
element負責顯示所有“派生自ContentControl”控件的內容。ContentPresenter將這個世界分成兩類對
象:UIElement的后代和非UIElement的后代,對于非UIElement的后代,ContentPresenter會調用對象的
ToString方法,用文本來展示該對象。這個功能讓“派生自ContentControl”的控件可以用來顯示任何種類的內容。
<Window.Resources>
<Style TargetType="Button" x:Key="ButtonStyle">
<!--設置按鈕的默認的樣式-->
<Setter Property="FontFamily" Value="Comic Sans MS"/>
</Setter>
<!--設置按鈕的模板-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Ellipse Fill="{TemplateBinding Background}"/>
<ContentPresenter
Margin="5"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<StackPanel>
<Button Margin="5" Style="{StaticResource ButtonStyle}"
Width="100" Height="100"
Content="My Button">
</Button>
<Button Margin="5" Width="200">Common Button</Button>
</StackPanel>。

總結

以上是生活随笔為你收集整理的【转】WPF中关于样式和模板的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。