按钮,最终效果,如下图:

见Project21_ButtonSkin

1, 创建Sliverlight项目

说明:

generic.xaml:样式和模板就被定义在这个文件里

MyButton.cs:控件的逻辑代码

2, 将下面两行代码添加到generic.xaml文件中

 

xmlns:src="clr-namespace:ButtonControlLibrary;assembly=ButtonControlLibrary"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"

3,Copy按钮的默认的ControlTemplate

 

(1)     在Blend for VS 中打开按钮的默认模板和样式

(2)     将(1)中的按钮“默认模板和样式”xaml代码,Copy到generic.xaml文件中

4,创建初始ControlTemplate

(1)     删除 Setter 元素直到(但不包括)<Setter Property="Template">。

(2)     删除第一个 Grid 元素,但不删除它内部的元素。

(3)     删除所有 Storyboard 元素,包括它们内部的元素。

(4)     删除名为 Background 的 Border 元素,包括它内部的元素。

(5)     删除 ContentPresenter 元素。

(6)     删除名为 DisabledVisualElement 和 FocusVisualElement 的 Rectangle 元素。

Border、ContentPresenter 和 Rectangle 元素组成默认按钮控件的结构。

(7)     在 Style 元素中,将 TargetType 属性更改为 src:MyButton。

(8)     在 ControlTemplate 元素中,将 TargetType 属性更改为 src:MyButton。

5,在generic.xaml中,编辑自己的模板和样式

<ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:src="clr-namespace:ButtonControlLibrary;assembly=ButtonControlLibrary"xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"><!--一,创建初始 ControlTemplate二,创建可视结构            step 1,2,3,4,5,6,7三,根据状态定义外观          step 8,9,10,11,12四,指定可视行为            step 13五,引用样式              step14--><Style x:Key="ButtonStyle1" TargetType="src:MyButton" >    <!--step7 设置该按钮的默认属性--><Setter Property="Background" Value="Navy"/><Setter Property="Foreground" Value="White"/><Setter Property="FontSize" Value="14"/><Setter Property="Width" Value="100"/><Setter Property="Height" Value="40"/><Setter Property="Margin" Value="10"/><Setter Property="HorizontalContentAlignment" Value="Center"/><Setter Property="VerticalContentAlignment" Value="Center"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="src:MyButton"><!-- step1 一个名为 RootElement 的 Border--><Border x:Name="RootElement"><VisualStateManager.VisualStateGroups><VisualStateGroup x:Name="CommonStates"><!--step13 使用 VisualTransition 可以指定控件转换为特定状态所耗费的时间。GeneratedDuration 属性指定转换所需的时间 --><vsm:VisualStateGroup.Transitions><!--指定该按钮应经过百分之一秒才进入按下状态--><vsm:VisualTransition To="Pressed" GeneratedDuration="0:0:0.01" /><!--指定该按钮应经过半秒才进入鼠标悬停状态--><vsm:VisualTransition To="MouseOver" GeneratedDuration="0:0:0.5" /><!-- 指定该按钮应经过百分之一秒才从按下状态进入鼠标悬停状态--><vsm:VisualTransition From="Pressed" To="MouseOver" GeneratedDuration="0:0:0.01" /><!-- 指定当控件从鼠标悬停状态转换为正常状态时某动画产生动作--><vsm:VisualTransition From="MouseOver" To="Normal" GeneratedDuration="0:0:1.5"><!-- 当用户将鼠标指针从按钮上移开时,按钮的边框在 1.5 秒内先变为蓝色,然后变为黄色,最后变为黑色--><Storyboard><ColorAnimationUsingKeyFramesStoryboard.TargetProperty="Color"Storyboard.TargetName="BorderBrush"FillBehavior="HoldEnd" ><ColorAnimationUsingKeyFrames.KeyFrames><LinearColorKeyFrame Value="Blue" KeyTime="0:0:0.5" /><LinearColorKeyFrame Value="Yellow" KeyTime="0:0:1" /><LinearColorKeyFrame Value="Black" KeyTime="0:0:1.5" /></ColorAnimationUsingKeyFrames.KeyFrames></ColorAnimationUsingKeyFrames></Storyboard></vsm:VisualTransition></vsm:VisualStateGroup.Transitions><VisualState x:Name="Normal"/><VisualState x:Name="MouseOver"><!--step8 将鼠标指针移到按钮上方时,按钮边框会设为红色--><Storyboard><ColorAnimation Storyboard.TargetName="BorderBrush" Storyboard.TargetProperty="Color" To="Red" /></Storyboard></VisualState><VisualState x:Name="Pressed"><!--step9 当按钮处于按下状态时,按钮边框会设为透明--><Storyboard ><ColorAnimation Storyboard.TargetName="BorderBrush" Storyboard.TargetProperty="Color" To="Transparent"/></Storyboard></VisualState><VisualState x:Name="Disabled"><!--step10 这使得当处于禁用状态时,DisabledRect 的 Opacity 会设为 1。这样将会在按钮的 IsEnabled 属性设置为 false 时显示 DisabledRect--><Storyboard><DoubleAnimation Storyboard.TargetName="DisabledRect" Storyboard.TargetProperty="Opacity"To="1" Duration="0" /></Storyboard></VisualState></VisualStateGroup><VisualStateGroup x:Name="FocusStates"><VisualState x:Name="Focused"><!--step11 --><Storyboard><ObjectAnimationUsingKeyFrames Storyboard.TargetName="FocusVisual" Storyboard.TargetProperty="Visibility" Duration="0"><DiscreteObjectKeyFrame KeyTime="0"><DiscreteObjectKeyFrame.Value><Visibility>Visible</Visibility></DiscreteObjectKeyFrame.Value></DiscreteObjectKeyFrame></ObjectAnimationUsingKeyFrames></Storyboard></VisualState><VisualState x:Name="Unfocused"><!--step12 --><Storyboard><ObjectAnimationUsingKeyFrames Storyboard.TargetName="FocusVisual" Storyboard.TargetProperty="Visibility" Duration="0"><DiscreteObjectKeyFrame KeyTime="0"><DiscreteObjectKeyFrame.Value><Visibility>Collapsed</Visibility></DiscreteObjectKeyFrame.Value></DiscreteObjectKeyFrame></ObjectAnimationUsingKeyFrames></Storyboard></VisualState></VisualStateGroup></VisualStateManager.VisualStateGroups><!--step2 按钮的背景--><Border.Background><SolidColorBrush x:Name="BorderBrush" Color="Black"/></Border.Background><!--step3 作为 RootElement 的子级的 Grid--><Grid Background="{TemplateBinding Background}" Margin="4"><!--step4 指示按钮是否具有焦点的 Rectangle--><Rectangle Name="FocusVisual" Visibility="Collapsed" Margin="2" Stroke="{TemplateBinding Foreground}" StrokeThickness="1" StrokeDashArray="1.5 1.5"/><!-- step5 一个显示按钮内容的 ContentPresenter--><ContentPresenterHorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"VerticalAlignment="{TemplateBinding VerticalContentAlignment}"Margin="4,5,4,4" /><!--step6 在禁用按钮时使按钮变灰的 Rectangle--><Rectangle x:Name="DisabledRect" Fill="#A5FFFFFF"Opacity="0" IsHitTestVisible="false" /></Grid></Border></ControlTemplate></Setter.Value></Setter></Style><!-- step14 --><Style TargetType="src:MyButton" BasedOn="{StaticResource ButtonStyle1}"></Style></ResourceDictionary>

6,使用自定义控件

在generic.xaml中,引用样式

 <!-- step14 --><Style TargetType="src:MyButton" BasedOn="{StaticResource ButtonStyle1}"></Style>

在页面中,添加引用

xmlns:blib="clr-namespace:ButtonControlLibrary;assembly=ButtonControlLibrary"

在页面中,创建两个Button

<StackPanel><blib:MyButton Content="Button1"  /><blib:MyButton Content="Button2" Background="Purple" /></StackPanel>

转载于:https://www.cnblogs.com/huaci/p/4421480.html

Sliverlight实例之 使用 ControlTemplate 自定义按钮的外观相关推荐

  1. 【iOS开发-8】UIButton类型属性简单归纳以及自定义按钮的设置

    (1)UIButton类继承自UIControl,而UIControl继承自UIView,因为UIView就是个矩形区域,所以UIButton实例化的对象其实都是一个矩形,虽然有各种圆角.增加联系人. ...

  2. dplayer js控制 自动全屏_vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】...

    最近公司的产品上线,一些高级功能在基础版本中不对用户开发,通过视频的形式展示. 产品开发用的是 vue, 经同事介绍使用了vue-video-player视频播放插件,通过 demo案例很快实现了视频 ...

  3. html编辑器不支持自定义样式,百度编辑器自定义按钮样式问题(写在cssRules不起做用)?...

    UE.registerUI('dialog',function(editor,uiName){ //创建dialog var dialog = new UE.ui.Dialog({ //指定弹出层中页 ...

  4. 自定义按钮 图片标题位置随意放置

    自定义按钮UIControl 写在前面 #图标和文字在一起是开发难免的问题,系统的按钮默认是图片居左的文字居右的, 且图片和文字的距离不好调整,图片的位置更是让人头疼, 故在闲暇之余封装了一个控件. ...

  5. 【实用】表维护视图SM30增加自定义按钮的实现

    表维护视图SM30增加自定义按钮的实现 1.新建Table并通过"表维护生成器"生成SM30维护视图. 正常的创建表维护视图到这一步也就结束了,最多是进函数组调整字段名称和显示效果 ...

  6. 如何在 SAP Fiori Elements List Report 表格工具栏里增添新的自定义按钮

    如下图所示,这是 SAP Fiori Elements List Report 一个例子,我们想在表格工具栏里,新增一个自定义按钮: 实现方式 在 SAP Fiori Elements 项目工程里,修 ...

  7. 按钮配置之自定义按钮使用(一)——JEPLUS软件快速开发平台

    为什么80%的码农都做不了架构师?>>>    JEPLUS按钮配置之自定义按钮使用(一) 系统开发过程中无论是表单的默认按钮或是列表的默认按钮以及Action的默认按钮有时候并不能 ...

  8. uibinder表单提交_使用UIBinder的GWT自定义按钮

    uibinder表单提交 这是一个有关如何在GWT上使用UIBinder创建自定义按钮的示例. public class GwtUIBinderButton implements EntryPoint ...

  9. 使用UIBinder的GWT自定义按钮

    这是一个有关如何在GWT上使用UIBinder创建自定义按钮的示例. public class GwtUIBinderButton implements EntryPoint {public void ...

最新文章

  1. Single Shot Multibox Detection (SSD)实战(上)
  2. python分布式任务调度_Python使用Celery分布式异步队列/任务调度(基于Redis) - pytorch中文网...
  3. QThreadPool Class的翻译
  4. 动态开辟指定数量的线程来查找动态开辟的数组中的1000000数据中的值
  5. win10下cmd ping不通虚拟机,xshell连不上虚拟机【如果实在想不出来原因,就看看吧】
  6. lync 2013 企业版部署 (四)安装office web app server
  7. C#怎么用代码模拟手机去访问手机网站抓取数据
  8. java开发简历编写_如何通过几个简单的步骤编写出色的初级开发人员简历
  9. 三星公布三款新型车用芯片 向大众供应
  10. 正则匹配身份证和邮箱
  11. java中之内存溢出说明
  12. [linux] redhat 7 iptables 配置
  13. 软工网络15团队作业4——Alpha阶段敏捷冲刺-3
  14. 局域网中的通信协议及选择简述。
  15. 会员运营方案纲要和培训(手稿记录)
  16. BDF 字体文件格式
  17. Homekit智能开关
  18. 医学超声成像—合成孔径法(Synthetic Aperture Methods)[2]
  19. html流星雨页面,HTML5炫酷流星雨特效
  20. 原来3DMAX入门应该这样学!

热门文章

  1. JimuReport积木报表—表达式介绍
  2. ***技术分析会话劫持***实战讲解
  3. 七十二个小时 (打一字)
  4. List初始化并赋值
  5. 驯服Win7成宠物,十大必杀绝技
  6. 【SQL SERVER】递归查询
  7. manjaro安装goland
  8. 动手学深度学习——卷积层
  9. spacedesk使用,让你体验分屏的快乐
  10. 【前端三剑客一】HTML的手术刀式剖析