Windows Phone开发(16):样式和控件模板
在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的一种可重用的属性设置列表,这样对于需要设置相同属性值的同类型的多个控件来讲是大大提高效率,我们不必要为每个控件做重复的动作。
下面是一个TextBox的样式示例,我们希望通过引用资源中的样式,使得页面上的所有TextBox控件都具有统一的外观,而且都只能输入数字。
- <phone:PhoneApplicationPage.Resources>
- <!--不带key的样式,应用于所有TextBlock元素-->
- <Style TargetType="TextBlock">
- <Setter Property="FontSize" Value="40"/>
- <Setter Property="Foreground" Value="Yellow"/>
- </Style>
- <!--带key的样式,只有引用该资源的元素才应用-->
- <Style x:Key="MyTextBoxStyle" TargetType="TextBox">
- <Setter Property="FontSize" Value="40"/>
- <Setter Property="Foreground" Value="Blue"/>
- <Setter Property="InputScope">
- <Setter.Value>
- <InputScope>
- <InputScopeName NameValue="Number"/>
- </InputScope>
- </Setter.Value>
- </Setter>
- </Style>
- </phone:PhoneApplicationPage.Resources>
- <Grid x:Name="LayoutRoot" Background="Transparent">
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="*"/>
- </Grid.RowDefinitions>
- <TextBlock Grid.Row="0" x:Name="PageTitle" Text="样式示例" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
- <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,10,12,0">
- <Grid.RowDefinitions>
- <RowDefinition Height="auto"/>
- <RowDefinition Height="auto"/>
- <RowDefinition Height="auto"/>
- <RowDefinition Height="auto"/>
- <RowDefinition Height="auto"/>
- </Grid.RowDefinitions>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="2*"/>
- <ColumnDefinition Width="3*"/>
- </Grid.ColumnDefinitions>
- <TextBlock Grid.Column="0" Grid.Row="0" Text="文本一:"/>
- <TextBlock Grid.Column="0" Grid.Row="1" Text="文本二:"/>
- <TextBlock Grid.Column="0" Grid.Row="2" Text="文本三:"/>
- <TextBlock Grid.Column="0" Grid.Row="3" Text="文本四:"/>
- <TextBlock Grid.Column="0" Grid.Row="4" Text="文本五:"/>
- <TextBox Grid.Column="1" Grid.Row="0" Style="{StaticResource MyTextBoxStyle}" />
- <TextBox Grid.Column="1" Grid.Row="1" Style="{StaticResource MyTextBoxStyle}" />
- <TextBox Grid.Column="1" Grid.Row="2" Style="{StaticResource MyTextBoxStyle}" />
- <TextBox Grid.Column="1" Grid.Row="3"/>
- <TextBox Grid.Column="1" Grid.Row="4"/>
- </Grid>
- </Grid>
1、带key的样式,不会自动应用到元素/控件上,除非元素的Style属性引用了该资源的键;
2、不带键的样式资源,将自动应用于当前页面(如果资源声明在当前页)中的所有同类型的元素。
而右面的一列TextBox,由于后面两个没有显式设置Style属性,故它们保持默认样式。
要自定义控件模板,首先要了解一下状态。
如果你以前做过WPF开发你会知道,在.NET 3.5的时候,自定义控件模板,针对控件状态的改变所做出的应对策略是通过触发器来完成的,但到了.NET 4,就有了状态的概念,而Silverlight 3也引入这概念,这样使得控件的状态管理更方便也更灵活了。
还有一点就是状态有分组的,每个组里面的状态是互斥的,也就是不能同时发生,每个时刻只允许组内一个状态发生,但不同组之间的状态是不冲突的。
- // 摘要:
- // 表示按钮控件。
- [TemplateVisualState(Name = "Unfocused", GroupName = "FocusStates")]
- [TemplateVisualState(Name = "Disabled", GroupName = "CommonStates")]
- [TemplateVisualState(Name = "Focused", GroupName = "FocusStates")]
- [TemplateVisualState(Name = "Pressed", GroupName = "CommonStates")]
- [TemplateVisualState(Name = "Normal", GroupName = "CommonStates")]
- [TemplateVisualState(Name = "MouseOver", GroupName = "CommonStates")]
- public class Button : ButtonBase
- <phone:PhoneApplicationPage.Resources>
- <ControlTemplate x:Key="Template1" TargetType="ButtonBase">
- <Grid>
- <!--状态组-->
- <VisualStateManager.VisualStateGroups>
- <VisualStateGroup x:Name="CommonStates">
- <VisualState x:Name="Normal"/>
- <VisualState x:Name="MouseOver"/>
- <VisualState x:Name="Pressed">
- <Storyboard>
- <DoubleAnimation
- Storyboard.TargetName="pressed"
- Storyboard.TargetProperty="Opacity"
- To="1" Duration="0:0:0.5"/>
- </Storyboard>
- </VisualState>
- <VisualState x:Name="Disabled">
- <Storyboard>
- <DoubleAnimation
- Storyboard.TargetName="disable"
- Storyboard.TargetProperty="Opacity"
- To="0.5" Duration="0:0:0.5"/>
- </Storyboard>
- </VisualState>
- </VisualStateGroup>
- <VisualStateGroup x:Name="FocusStates">
- <VisualState x:Name="Focused">
- <Storyboard>
- <DoubleAnimation
- Storyboard.TargetName="focussbd"
- Storyboard.TargetProperty="Opacity"
- To="0.88"/>
- </Storyboard>
- </VisualState>
- </VisualStateGroup>
- </VisualStateManager.VisualStateGroups>
- <Border BorderBrush="{TemplateBinding BorderBrush}"
- BorderThickness="{TemplateBinding BorderThickness}">
- <Grid x:Name="background" Background="{TemplateBinding Background}">
- <Rectangle x:Name="pressed" Opacity="0" RadiusX="2" RadiusY="2">
- <Rectangle.Fill>
- <LinearGradientBrush
- StartPoint=".5,0"
- EndPoint=".5,1">
- <GradientStop Color="SkyBlue" Offset=".1"/>
- <GradientStop Color="Blue" Offset=".9"/>
- </LinearGradientBrush>
- </Rectangle.Fill>
- </Rectangle>
- <ContentPresenter x:Name="ContentPresenter"
- HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
- VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
- Margin="{TemplateBinding Padding}"
- Content="{TemplateBinding Content}"
- ContentTemplate="{TemplateBinding ContentTemplate}"/>
- <Rectangle x:Name="disable" Opacity="0" Fill="Gray" RadiusX="2" RadiusY="2"/>
- <Border x:Name="focussbd" BorderBrush="LightGreen" BorderThickness="2" CornerRadius="2" Opacity="0"/>
- </Grid>
- </Border>
- </Grid>
- </ControlTemplate>
- </phone:PhoneApplicationPage.Resources>
- <Grid x:Name="ContentPanel" Margin="12,0,12,0">
- <Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="135,155,0,0" Name="button1" VerticalAlignment="Top" Width="160" Template="{StaticResource Template1}" />
- </Grid>
控件模板有时候很难一两句话讲清楚,别看它好像很多东西,其实很简单,它无非包括两个东西——状态和UI元素,至于怎么个布局法,完全取决于你希望怎么设计了。
转载于:https://www.cnblogs.com/xieweikai/p/6833153.html
Windows Phone开发(16):样式和控件模板相关推荐
- Windows Phone开发(16):样式和控件模板 转:http://blog.csdn.net/tcjiaan/article/details/7367260...
在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的一种可重用的属性设置列表,这样对于需要设置相同属性值的同类型的 ...
- Silverlight 属性样式、控件模板、视觉状态
在使用Silverlight的样式的时候感觉非常好,以前在HTML上很难实现的效果在这里都变的如此简单. 属性样式 控件的属性样式好比CSS的Class功能定义,是用来统一定义和维护控件属性的方式,控 ...
- Windows App开发之经常使用控件与应用栏
控件的属性.事件与样式资源 怎样加入控件 加入控件的方式有多种,大家更喜欢以下哪一种呢? 1)使用诸如Blend for Visual Studio或Microsoft Visual Studio X ...
- 【飞秋】一起学Windows Phone7开发(十三.四 基本控件)
在这里,把一些最基本的控件列出来,其实也就是没有归类的控件都放在这里了. 一.TextBlock:这个控件其实就是Label控件. <TextBlock x:Name="PageTit ...
- 【飞秋】一起学Windows Phone7开发(十三.二 按钮控件)
在Silverlight中有多种按钮控件,这些控件在Windows phone7中也都得到了很好的支持. 一.Button: 这个控件只是一个基础控件,通过blend可以创建出多种效果的按钮来. &l ...
- 一起学Windows Phone7开发(十三.三 输入控件)
在Phone7中主要的输入控件其实就有两个,一个是textbox,另一个就是password控件.这两个控件中尤其是TextBox控件有了很多新特性. 一.PasswordBox: 密码框控件,用 ...
- windows常见窗口样式和控件风格以及类样式
Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_P ...
- Windows常见窗口样式和控件风格
Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用) WS_CHILDWINDOW 子窗口(不能与WS_P ...
- 快速构建Windows 8风格应用6-GridView数据控件
原文:快速构建Windows 8风格应用6-GridView数据控件 本篇博文主要介绍什么是GridView数据控件.如何构建常用的GridView数据呈现样式. 什么是GridView数据控件? G ...
最新文章
- matlab inviter,水中石
- python实现新闻网站_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?
- python socket 书籍_Python学习之路——socket
- PAT (Advanced Level) 1004 Counting Leaves(树的遍历)
- if match header test - 428 Precondition required
- 如果编程语言是女孩子
- 4.Dynamics CRM 数据数量限制更改
- 第5 章持久化类(Persistent Classes)
- Android上传文件至服务器
- 用laravel dingo api插件库创建api的一些心得笔记
- 深入理解 GraphQL
- AD16原理图页设置库路径(1)
- Python-常用模块有哪些
- 空间数据挖掘与空间大数据的探索与思考(三)
- python残差分析图
- springboot结合注解动态获取数据库表
- 【旧资料整理】8086汇编 鼠标操作
- html如何设定盒子的高,css 高度height设置
- 02.windows转mac日记——操作习惯
- 循环冗余校验码例题[转帖]