之前一直做WPF现在开始接触Slilverlight感触很多。
今天做一个Button要求
有两个图片,button默认有一个图片,鼠标over时用另一个图片,
用wpf做的时候写一个template很简单,但silverlight和wpf写起来不一样
记录一下。大概思路是两个image鼠标MouseOver的时候一个Visible一个Collapsed
写的是一个自定义控件,代码和皮肤分离,很简单的一个demo
代码下载:ImageButtonTest.rar
先写一个继承自button的imagebutton类
代码语言:javascript复制 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
代码语言:javascript复制 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>
这样就可以用了
我们在页面上调用一下
代码语言:javascript复制<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>