在上一遍文章中已經介紹到可以在Resources集合中定義樣式,我們也可以在一個樣式上引用其他的樣式,這就是繼承的概念,使用方法是將引用的樣式放置在Style中的BaseOn屬性;這裡使用到的是xaml標記延伸進行設定,比如這裡定義的三個樣式:
<phone:PhoneApplicationPage.Resources> <Style x:Key="tbStyle" TargetType="TextBlock"> <Setter Property="HorizontalAlignment" Value="Center"></Setter> <Setter Property="HorizontalAlignment" Value="Center"></Setter> <Setter Property="Foreground"> <Setter.Value> <LinearGradientBrush> <GradientStop Offset="0.2" Color="Brown"></GradientStop> <GradientStop Offset="0.7" Color="DarkBlue"></GradientStop> </LinearGradientBrush> </Setter.Value> </Setter> </Style> <Style x:Key="fStyle" TargetType="TextBlock"> <Setter Property="VerticalAlignment" Value="Bottom"></Setter> </Style> <Style x:Key="tStyle" TargetType="TextBlock" BasedOn="{StaticResource tbStyle}"> <Setter Property="VerticalAlignment" Value="Top"></Setter> </Style> </phone:PhoneApplicationPage.Resources>
從上面代碼中我們可以看到第三個樣式繼承了第一個樣式,然後第一個樣式中我們定義的垂直方向的位置,第三個也定義了垂直方向的位置,然後我們從textblock中使用第三個樣式
<TextBlock x:Name="tbContent" Text="顯示樣式" Style="{StaticResource tStyle}" />
效果如下:
這說明第三個樣式中的屬性覆蓋了第一個樣式中的相同的屬性 ;需要注意的是,上面三個樣式是有先後順序的,即下面的可以繼承上面的,但是上面的不能繼承下面的,系統會提示警告,找不到你要繼承的樣式;那麼如果這三個樣式中的樣式進行級聯繼承會出現什麼情況那:代碼如下:
<phone:PhoneApplicationPage.Resources> <Style x:Key="tbStyle" TargetType="TextBlock"> <Setter Property="HorizontalAlignment" Value="Center"></Setter> <Setter Property="HorizontalAlignment" Value="Center"></Setter> <Setter Property="Foreground"> <Setter.Value> <LinearGradientBrush> <GradientStop Offset="0.2" Color="Brown"></GradientStop> <GradientStop Offset="0.7" Color="DarkBlue"></GradientStop> </LinearGradientBrush> </Setter.Value> </Setter> </Style> <Style x:Key="tStyle" TargetType="TextBlock" BasedOn="{StaticResource tbStyle}"> <Setter Property="VerticalAlignment" Value="Top"></Setter> <Setter Property="HorizontalAlignment" Value="Left"></Setter> </Style> <Style x:Key="fStyle" TargetType="TextBlock" BasedOn="{StaticResource tStyle}"> <Setter Property="VerticalAlignment" Value="Bottom"></Setter> </Style> </phone:PhoneApplicationPage.Resources>
然後textblock使用第三個樣式
<TextBlock x:Name="tbContent" Text="顯示樣式" Style="{StaticResource fStyle}" />
效果就是這樣子了
所以我們可以這樣總結,定義三個或更多個樣式,如A,B,C 如果B繼承A,C繼承B,那麼優先順序是C>B>A,也可以這麼說樣式的繼承是越往上優先順序越低;
給大家貼兩篇文章的連結,共勉:
WP7開發學習(4):Style樣式的四種使用----在wp中對樣式的總結
WPF中的依賴項屬性----依賴項屬性終於明白了