【转】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中关于样式和模板的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 未足额计提加计抵减额什么意思
- 下一篇: 人身保险的三要素包括