用Silverlight开发ImageButton控件

由于项目需要用Silverlight开发一个ImageButton控件,效果如下图所示:

如上图所示:ImageButton分为正常、鼠标划过、单击、不可用等四个状态。

ImageButton由ImageButton.cs和Generic.xaml组成,如下图所示:

以下是ImageButton.cs文件的代码:

public class ImageButton : Button

{

public ImageButton()

{

this.DefaultStyleKey = typeof(ImageButton);

}

 

public static readonly DependencyProperty TitleProperty =

DependencyProperty.Register("Title", typeof(string), typeof(ImageButton), null);

 

/// <summary>

/// 获取或设置标题

/// </summary>

public string Title

{

get { return (string)GetValue(TitleProperty); }

set { SetValue(TitleProperty, value); }

}

 

public static readonly DependencyProperty TitleIconProperty =

DependencyProperty.Register("TitleIcon", typeof(BitmapImage), typeof(ImageButton), null);

 

/// <summary>

/// 获取或设置标题图标

/// </summary>

public BitmapImage TitleIcon

{

get { return (BitmapImage)GetValue(TitleIconProperty); }

set { SetValue(TitleIconProperty, value); }

}

}

以下是Generic.xaml文件的代码:

<ResourceDictionary

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

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

xmlns:local="clr-namespace:ImgBtnTest"

>

<Style TargetType="local:ImageButton">

<Setter Property="Background" Value="#359CE7"/>

<Setter Property="Foreground" Value="White"/>

<Setter Property="Padding" Value="3"/>

<Setter Property="BorderThickness" Value="1"/>

<Setter Property="BorderBrush" Value="#359CE7"/>

<Setter Property="FontFamily" Value="Arial,SimSun"></Setter>

<Setter Property="FontSize" Value="14"></Setter>

<Setter Property="FontWeight" Value="Bold"/>

<Setter Property="Template">

<Setter.Value>

<ControlTemplate TargetType="local:ImageButton">

<Grid>

<vsm:VisualStateManager.VisualStateGroups>

<vsm:VisualStateGroup x:Name="CommonStates">

<vsm:VisualState x:Name="Normal"/>

<vsm:VisualState x:Name="MouseOver">

<Storyboard>

<ColorAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Rectangle.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)">

<SplineColorKeyFrame KeyTime="0" Value="#FF69C7ED"/>

</ColorAnimationUsingKeyFrames>

<ColorAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Rectangle.Fill).(GradientBrush.GradientStops)[2].(GradientStop.Color)">

<SplineColorKeyFrame KeyTime="0" Value="#FFA0DCF6"/>

</ColorAnimationUsingKeyFrames>

<ColorAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Rectangle.Fill).(GradientBrush.GradientStops)[3].(GradientStop.Color)">

<SplineColorKeyFrame KeyTime="0" Value="#FFB9E6FD"/>

</ColorAnimationUsingKeyFrames>

</Storyboard>

</vsm:VisualState>

<vsm:VisualState x:Name="Pressed">

<Storyboard>

<ColorAnimationUsingKeyFrames Storyboard.TargetName="BackgroundBorder" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)">

<SplineColorKeyFrame KeyTime="0" Value="#142EEF"/>

</ColorAnimationUsingKeyFrames>

<ColorAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Rectangle.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)">

<SplineColorKeyFrame KeyTime="0" Value="#FF359CE7"/>

</ColorAnimationUsingKeyFrames>

<ColorAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Rectangle.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)">

<SplineColorKeyFrame KeyTime="0" Value="#FF69C7ED"/>

</ColorAnimationUsingKeyFrames>

<ColorAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Rectangle.Fill).(GradientBrush.GradientStops)[2].(GradientStop.Color)">

<SplineColorKeyFrame KeyTime="0" Value="#FFA0DCF6"/>

</ColorAnimationUsingKeyFrames>

<ColorAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Rectangle.Fill).(GradientBrush.GradientStops)[3].(GradientStop.Color)">

<SplineColorKeyFrame KeyTime="0" Value="#FFB9E6FD"/>

</ColorAnimationUsingKeyFrames>

</Storyboard>

</vsm:VisualState>

<vsm:VisualState x:Name="Disabled">

<Storyboard>

<DoubleAnimationUsingKeyFrames Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity">

<SplineDoubleKeyFrame KeyTime="0" Value=".55"/>

</DoubleAnimationUsingKeyFrames>

</Storyboard>

</vsm:VisualState>

</vsm:VisualStateGroup>

<vsm:VisualStateGroup x:Name="FocusStates">

<vsm:VisualState x:Name="Focused">

<Storyboard>

<DoubleAnimationUsingKeyFrames Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Opacity">

<SplineDoubleKeyFrame KeyTime="0" Value="1"/>

</DoubleAnimationUsingKeyFrames>

</Storyboard>

</vsm:VisualState>

<vsm:VisualState x:Name="Unfocused"/>

</vsm:VisualStateGroup>

</vsm:VisualStateManager.VisualStateGroups>

<Border x:Name="BackgroundBorder" Background="White" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="3">

<Grid>

<Rectangle x:Name="BackgroundGradient">

<Rectangle.Fill>

<LinearGradientBrush EndPoint="1,1" StartPoint="0.7,0.2">

<GradientStop Color="#359CE7" Offset="0"/>

<GradientStop Color="#359CE7" Offset="0.33"/>

<GradientStop Color="#359CE7" Offset="0.66"/>

<GradientStop Color="#359CE7" Offset="1"/>

</LinearGradientBrush>

</Rectangle.Fill>

</Rectangle>

</Grid>

</Border>

<Grid>

<Grid HorizontalAlignment="Center" VerticalAlignment="Center">

<Grid.RowDefinitions>

<RowDefinition Height="Auto"/>

<RowDefinition Height="Auto"/>

</Grid.RowDefinitions>

<Image Source="{TemplateBinding TitleIcon}" Grid.Row="0" Margin="2,2,2,0" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="None"/>

<TextBlock Text="{TemplateBinding Title}" Grid.Row="1" Margin="5,5,5,2" HorizontalAlignment="Center" VerticalAlignment="Center"/>

</Grid>

</Grid>

<Rectangle x:Name="DisabledVisualElement" IsHitTestVisible="false" Opacity="0" RadiusX="3" RadiusY="3" Fill="#FFFFFFFF"/>

<Rectangle Margin="1" x:Name="FocusVisualElement" IsHitTestVisible="false" Opacity="0" RadiusX="2" RadiusY="2" Stroke="Transparent" StrokeThickness="2"/>

</Grid>

</ControlTemplate>

</Setter.Value>

</Setter>

</Style>

</ResourceDictionary>

以下是使用控件的代码:

<UserControl

xmlns:local="clr-namespace:ImgBtnTest" x:Class="ImgBtnTest.MainPage"

<Grid x:Name="LayoutRoot" Background="White">

<local:ImageButton x:Name="imgBtn1" Width="80" Height="70" Title="提交" TitleIcon="/ImgBtnTest;component/Images/提交.png" HorizontalAlignment="Left" Margin="71,82,0,0" VerticalAlignment="Top" Click="ImageButton_Click"/>

</Grid>

</UserControl>

 

转载于:https://www.cnblogs.com/lyf681888/p/3638177.html

weixin151云匹面粉直供微信小程序+springboot后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值