天天看点

windows phone (13) 样式继承

 在上一遍文章中已经介绍到可以在Resources集合中定义样式,我们也可以在一个样式上引用其他的样式,这就是继承的概念,使用方法是将引用的样式放置在Style中的BaseOn属性;这里使用到的是xaml标记扩展进行设置,比如这里定义的三个样式:

<phone:PhoneApplicationPage.Resources>  

       <Style x:Key="tbStyle" TargetType="TextBlock">  

           <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 x:Key="tStyle" TargetType="TextBlock" BasedOn="{StaticResource tbStyle}">  

           <Setter Property="VerticalAlignment" Value="Top"></Setter>  

   </phone:PhoneApplicationPage.Resources>  

 从上面代码中我们可以看到第三个样式继承了第一个样式,然后第一个样式中我们定义的垂直方向的位置,第三个也定义了垂直方向的位置,然后我们从textblock中使用第三个样式

<TextBlock x:Name="tbContent" Text="显示样式"  Style="{StaticResource tStyle}"  />  

效果如下:

这说明第三个样式中的属性覆盖了第一个样式中的相同的属性 ;需要注意的是,上面三个样式是有先后顺序的,即下面的可以继承上面的,但是上面的不能继承下面的,系统会提示警告,找不到你要继承的样式;那么如果这三个样式中的样式进行级联继承会出现什么情况那:代码如下:

        <Style x:Key="tbStyle" TargetType="TextBlock">  

            <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 x:Key="fStyle" TargetType="TextBlock" BasedOn="{StaticResource tStyle}">  

            <Setter Property="VerticalAlignment" Value="Bottom"></Setter>  

    </phone:PhoneApplicationPage.Resources>  

然后textblock使用第三个样式

<TextBlock x:Name="tbContent" Text="显示样式"  Style="{StaticResource fStyle}"  />  

效果就是这样子了

 所以我们可以这样总结,定义三个或更多个样式,如A,B,C 如果B继承A,C继承B,那么优先级是C>B>A,也可以这么说样式的继承是越往上优先级越低;

本文转自shenzhoulong  51CTO博客,原文链接:http://blog.51cto.com/shenzhoulong/837285,如需转载请自行联系原作者

继续阅读