Silverlight button 图片切换样式
时间:2022-04-25
本文章向大家介绍Silverlight button 图片切换样式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
之前一直做WPF现在开始接触Slilverlight感触很多。
今天做一个Button要求
有两个图片,button默认有一个图片,鼠标over时用另一个图片,
用wpf做的时候写一个template很简单,但silverlight和wpf写起来不一样
记录一下。大概思路是两个image鼠标MouseOver的时候一个Visible一个Collapsed
写的是一个自定义控件,代码和皮肤分离,很简单的一个demo
代码下载:ImageButtonTest.rar
先写一个继承自button的imagebutton类
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Documents;
8 using System.Windows.Input;
9 using System.Windows.Media;
10 using System.Windows.Media.Animation;
11 using System.Windows.Shapes;
12
13 namespace ImageButtonTest
14 {
15 /// <summary>
16 /// build by lp
17 /// </summary>
18 public class MyImageButton : Button
19 {
20
21 public static readonly DependencyProperty ImageNormalProperty =
22 DependencyProperty.Register("ImageNormal",
23 typeof(ImageSource),
24 typeof(MyImageButton),
25 new PropertyMetadata(null));
26
27 public static readonly DependencyProperty ImageHoverProperty =
28 DependencyProperty.Register("ImageHover",
29 typeof(ImageSource),
30 typeof(MyImageButton),
31 new PropertyMetadata(null));
32 //鼠标移到上面
33 public ImageSource ImageHover
34 {
35 get { return (ImageSource)GetValue(ImageHoverProperty); }
36 set { SetValue(ImageHoverProperty, value); }
37 }
38 //默认图片
39 public ImageSource ImageNormal
40 {
41 get { return (ImageSource)GetValue(ImageNormalProperty); }
42 set { SetValue(ImageNormalProperty, value); }
43 }
44
45 public MyImageButton()
46 {
47 this.DefaultStyleKey = typeof(MyImageButton);
48 }
49 }
50 }
一个是鼠标移到上面的imageSource一个是默认的source
看一下它的样式 用sotryboard控制
鼠标MouseOver的时候一个Visible一个Collapsed
1 <ResourceDictionary
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:local="clr-namespace:ImageButtonTest" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
5
6
7 <Style TargetType="local:MyImageButton">
8 <Setter Property="Template">
9 <Setter.Value>
10 <ControlTemplate TargetType="local:MyImageButton">
11 <Grid Background="{TemplateBinding Background}">
12 <VisualStateManager.VisualStateGroups>
13 <VisualStateGroup x:Name="CommonStates">
14
15 <VisualState x:Name="Normal"/>
16 <VisualState x:Name="MouseOver">
17 <Storyboard>
18 <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="mouseOverImage">
19 <DiscreteObjectKeyFrame KeyTime="0">
20 <DiscreteObjectKeyFrame.Value>
21 <Visibility>Visible</Visibility>
22 </DiscreteObjectKeyFrame.Value>
23 </DiscreteObjectKeyFrame>
24 </ObjectAnimationUsingKeyFrames>
25 <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="normalImage">
26 <DiscreteObjectKeyFrame KeyTime="0">
27 <DiscreteObjectKeyFrame.Value>
28 <Visibility>Collapsed</Visibility>
29 </DiscreteObjectKeyFrame.Value>
30 </DiscreteObjectKeyFrame>
31 </ObjectAnimationUsingKeyFrames>
32 </Storyboard>
33 </VisualState>
34 <VisualState x:Name="Pressed"/>
35 <VisualState x:Name="Disabled"/>
36 </VisualStateGroup>
37 </VisualStateManager.VisualStateGroups>
38 <Image x:Name="normalImage" Source="{TemplateBinding ImageNormal}" Stretch="Fill"/>
39 <Image x:Name="mouseOverImage" Source="{TemplateBinding ImageHover}" Stretch="Fill" Visibility="Collapsed"/>
40 </Grid>
41 </ControlTemplate>
42 </Setter.Value>
43 </Setter>
44 </Style>
45 </ResourceDictionary>
这样就可以用了
我们在页面上调用一下
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ImageButtonTest" x:Class="ImageButtonTest.MainPage"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<local:MyImageButton Margin="0" ImageHover="Images/全屏鼠标移上.png" ImageNormal="Images/全屏.png" Width="100" Height="100" HorizontalAlignment="Center" VerticalAlignment="Center">
</local:MyImageButton>
</Grid>
</UserControl>
- C++ 多线程编程总结
- LUA面向对象编程技巧
- 在Atom中配置Python开发环境
- C++ 多进程并发框架FFLIB之Tutorial
- 从补丁到漏洞分析——记一次joomla漏洞应急
- Python中对字节流/二进制流的操作:struct模块简易使用教程
- C++ 后台程序实时性能监控
- 系统入侵后的排查思路及心得
- 记一次Linux被入侵的经历
- C++ FFLIB之ffcount:通用数据分析系统
- Python内置数据结构之迭代器知多少?
- Python之解析式您知多少?
- C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
- C++ FFLIB之FFXML: 极简化TinyXml 读取
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 翻车!居然在这里翻车了!!!
- PAT (Advanced Level) Practice 1029 Median (25分)
- ServiceMesh的关键:边车模式(sidecar);又要开车了
- Codeforces Round #615 (Div. 3)A. Collecting Coins
- PAT (Advanced Level) Practice 1040 Longest Symmetric String (25分)
- 【Java】23 函数式编程
- 【Java】24 常用函数式接口
- mvnw,到底是什么鬼?
- 【Java】25 Stream 流
- Codeforces Round #615 (Div. 3)D. MEX maximizing
- PAT (Advanced Level) Practice 1039 Course List for Student (25分)
- Codeforces Round #615 (Div. 3) E. Obtain a Permutation
- 数据结构实验完结撒花之内部排序比较
- Codeforces Round #615 (Div. 3) F. Three Paths on a Tree
- Matlab 内联函数及匿名函数