windows phone (13) 樣式繼承

 在上一遍文章中已經介紹到可以在Resources集合中定義樣式,我們也可以在一個樣式上引用其他的樣式,這就是繼承的概念,使用方法是將引用的樣式放置在Style中的BaseOn屬性;這裏使用到的是xaml標記擴展進行設置,比如這裏定義的三個樣式:

  1. <phone:PhoneApplicationPage.Resources>  
  2.        <Style x:Key="tbStyle" TargetType="TextBlock">  
  3.            <Setter Property="HorizontalAlignment" Value="Center"></Setter>  
  4.            <Setter Property="HorizontalAlignment" Value="Center"></Setter>  
  5.            <Setter Property="Foreground">  
  6.                <Setter.Value>  
  7.                    <LinearGradientBrush>  
  8.                        <GradientStop Offset="0.2" Color="Brown"></GradientStop>  
  9.                        <GradientStop Offset="0.7" Color="DarkBlue"></GradientStop>  
  10.                    </LinearGradientBrush>  
  11.                </Setter.Value>  
  12.            </Setter>  
  13.        </Style>  
  14.        <Style x:Key="fStyle" TargetType="TextBlock">  
  15.            <Setter Property="VerticalAlignment" Value="Bottom"></Setter>  
  16.        </Style>  
  17.        <Style x:Key="tStyle" TargetType="TextBlock" BasedOn="{StaticResource tbStyle}">  
  18.            <Setter Property="VerticalAlignment" Value="Top"></Setter>  
  19.        </Style>  
  20.    </phone:PhoneApplicationPage.Resources>  

 從上面代碼中我們可以看到第三個樣式繼承了第一個樣式,然後第一個樣式中我們定義的垂直方向的位置,第三個也定義了垂直方向的位置,然後我們從textblock中使用第三個樣式

  1. <TextBlock x:Name="tbContent" Text="顯示樣式"  Style="{StaticResource tStyle}"  />  

效果如下:

 

這說明第三個樣式中的屬性覆蓋了第一個樣式中的相同的屬性 ;需要注意的是,上面三個樣式是有先後順序的,即下面的可以繼承上面的,但是上面的不能繼承下面的,系統會提示警告,找不到你要繼承的樣式;那麼如果這三個樣式中的樣式進行級聯繼承會出現什麼情況那:代碼如下:

 

  1. <phone:PhoneApplicationPage.Resources>  
  2.         <Style x:Key="tbStyle" TargetType="TextBlock">  
  3.             <Setter Property="HorizontalAlignment" Value="Center"></Setter>  
  4.             <Setter Property="HorizontalAlignment" Value="Center"></Setter>  
  5.             <Setter Property="Foreground">  
  6.                 <Setter.Value>  
  7.                     <LinearGradientBrush>  
  8.                         <GradientStop Offset="0.2" Color="Brown"></GradientStop>  
  9.                         <GradientStop Offset="0.7" Color="DarkBlue"></GradientStop>  
  10.                     </LinearGradientBrush>  
  11.                 </Setter.Value>  
  12.             </Setter>  
  13.         </Style>  
  14.         <Style x:Key="tStyle" TargetType="TextBlock" BasedOn="{StaticResource tbStyle}">  
  15.             <Setter Property="VerticalAlignment" Value="Top"></Setter>  
  16.             <Setter Property="HorizontalAlignment" Value="Left"></Setter>  
  17.         </Style>  
  18.         <Style x:Key="fStyle" TargetType="TextBlock" BasedOn="{StaticResource tStyle}">  
  19.             <Setter Property="VerticalAlignment" Value="Bottom"></Setter>  
  20.         </Style>  
  21.          
  22.     </phone:PhoneApplicationPage.Resources>  

然後textblock使用第三個樣式


  1. <TextBlock x:Name="tbContent" Text="顯示樣式"  Style="{StaticResource fStyle}"  />  

效果就是這樣子了

 

 所以我們可以這樣總結,定義三個或更多個樣式,如A,B,C 如果B繼承A,C繼承B,那麼優先級是C>B>A,也可以這麼說樣式的繼承是越往上優先級越低;


 給大家貼兩篇文章的鏈接,共勉:

 

 

 

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