WPF學習 第十一章1 樣式

1.樣式:

樣式(Style)是組織和重用格式化選項的重要工具。樣式封裝了一系列屬性設置細節。

儘管可以使用資源存儲各種對象,但是使用資源最常見的原因之一是通過它們保存樣式。

1.1 簡單的樣式例子


本例中,在資源中定義一個按鈕文本字體樣式,然後Button1使用該樣式。

樣式的定義:

<Window.Resources>

       <Style x:Key="BigFontStyle">

           <Style.Setters>

                <SetterProperty="Control.FontFamily" Value="Times NewRoman"></Setter>

                <SetterProperty="Control.FontSize" Value="30"></Setter>

                <Setter Property="Control.FontWeight"Value="Bold"></Setter>

                <SetterProperty="Control.Background">

                    <Setter.Value>

                        <ImageBrushImageSource="C:\\Image1.bmp"></ImageBrush>

                    </Setter.Value>

               </Setter>

           </Style.Setters>

       </Style>

</Window.Resources>

樣式的使用1:

   <StackPanel>

       <Button Name="button1" Content="Button1"Style="{StaticResource BigFontStyle}"></Button>

<Button Name="button2" Content="Button2"></Button>

</StackPanel>

樣式的使用2(C#代碼實現):

this.button1.Style= (Style)TryFindResource("BigFontStyle");

表1.1 Style類的屬性

屬性

說明

Setters

包含Setter和EventSetter對象集合

Triggers

當屬性改變時觸發修改樣式

Resources

希望用於樣式的資源集合

BasedOn

可創建繼承樣式

TargetType

標識該樣式應用到的元素類型

 

1.2屬性設置器(Setters的Setter)

寫法1:

<Window.Resources>

       <Style x:Key="BigFontStyleButton">

           <Style.Setters>

                <Setter Property="Button.FontFamily" Value="Times NewRoman"></Setter>

                <Setter Property="Button.FontSize" Value="30"></Setter>

                <Setter Property="Button.FontWeight"Value="Bold"></Setter>

                <Setter Property="Button.Background">

                    <Setter.Value>

                        <ImageBrushImageSource="C:\\Image1.bmp"></ImageBrush>

                    </Setter.Value>

                </Setter>

           </Style.Setters>

       </Style>

   </Window.Resources>

寫法2(簡化):

   <Window.Resources>

       <Style x:Key="BigFontStyleButton" TargetType="Button">

           <Style.Setters>

                <SetterProperty="FontFamily" Value="Times NewRoman"></Setter>

                <SetterProperty="FontSize" Value="30"></Setter>

                <SetterProperty="FontWeight" Value="Bold"></Setter>

                <SetterProperty="Background">

                    <Setter.Value>

                        <ImageBrushImageSource="C:\\Image1.bmp"></ImageBrush>

                    </Setter.Value>

                </Setter>

           </Style.Setters>

       </Style>

</Window.Resources>

1.3事件設置器(Setters的EventSetter)


下面是事件設置器的用法。事實上事件設置器很少使用,都是用事件觸發器代替的。

XAML標記代碼:

<Window.Resources>

       <Style x:Key="MouseOverHightLightStyle"TargetType="TextBox">

           <Style.Setters>

                <EventSetterEvent="MouseEnter"Handler="mouseEnter_Event"></EventSetter>

                <EventSetterEvent="MouseLeave"Handler="mouseLeave_Event"></EventSetter>

                <SetterProperty="FontSize" Value="40"></Setter>

           </Style.Setters>

       </Style>

   </Window.Resources>

   <StackPanel>

       <TextBox Style="{StaticResourceMouseOverHightLightStyle}">TextBox</TextBox>

</StackPanel>

事件處理代碼:

private void mouseEnter_Event(objectsender, MouseEventArgs e)

       {

           ((TextBox)sender).Background = new SolidColorBrush(Colors.Red);

       }

       private void mouseLeave_Event(object sender, MouseEventArgs e)

       {

           ((TextBox)sender).Background = null;

       }

1.4樣式的繼承(BasedOn)


樣式之間可以像類繼承一樣繼承。

<Window.Resources>

       <Style x:Key="MouseOverHightLightStyle"TargetType="TextBox">

           <Style.Setters>

                <EventSetterEvent="MouseEnter"Handler="mouseEnter_Event"></EventSetter>

                <EventSetterEvent="MouseLeave" Handler="mouseLeave_Event"></EventSetter>

                <SetterProperty="FontSize" Value="40"></Setter>

           </Style.Setters>

       </Style>

       <Style x:Key="BasedOnMouseOverHightLightStyle"TargetType="TextBox" BasedOn="{StaticResource MouseOverHightLightStyle}">

           <Setter Property="Background"Value="Cyan"></Setter>

           <Setter Property="Foreground"Value="Yellow"></Setter>

       </Style>

   </Window.Resources>

   <StackPanel>

       <TextBox Style="{StaticResource BasedOnMouseOverHightLightStyle}">TextBox</TextBox>

   </StackPanel>

1.5通過控件類型自動應用樣式

使用TargetType,但是不定義x:Key,則所有該類型的控件都會默認只用該樣式。


例子1(樣式類型是TextBox):

<Window.Resources>

       <Style TargetType="TextBox">

           <Style.Setters>

                <SetterProperty="FontSize" Value="40"></Setter>

           </Style.Setters>

       </Style>

   </Window.Resources>

   <StackPanel>

       <TextBox>TextBox</TextBox>

       <Button Name="button1" Content="Button1"></Button>

</StackPanel>


例子2(樣式類型爲Button):

<Window.Resources>

       <Style TargetType="Button">

           <Style.Setters>

                <SetterProperty="FontSize" Value="40"></Setter>

           </Style.Setters>

       </Style>

   </Window.Resources>

   <StackPanel>

       <TextBox>TextBox</TextBox>

       <Button Name="button1" Content="Button1"></Button>

<Button Name="button2" Content="Button2"Style="{x:Null}"></Button>

</StackPanel>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章