Silverlight 用DependencyProperty 自定义ImageButton控件 定义属性
为ImageButton自定义IconSource和Contents属性
xaml代码
<UserControl x:Class="SilverlightCreate.SilverlightButtons"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"mc:Ignorable="d"d:DesignHeight="30" d:DesignWidth="100"><Grid x:Name="LayoutRoot" Background="Transparent"><StackPanel x:Name="myButton" Orientation="Horizontal" ><Image x:Name="myImg" Stretch="None" /><TextBlock x:Name="myText" VerticalAlignment="Center" FontSize="13" Padding="5" /></StackPanel><Rectangle x:Name="myRectangle" Margin="-3" /></Grid> </UserControl>
View Code
下面开始自定义属性内容,自定义属性要用 依赖属性类 DependencyProperty
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new UIPropertyMetadata(0));
DependencyProperty 的Register 方法中有四个参数,第一个是自定的属性,第二个自定义属性的参数类型,第三个是自定义属性所属类,第四个是属性元数据的实例,参数类型是PropertyMetadata。
使用vs2010的小技巧,生成依赖属性可以输入propdp,然后按两下Tab键,就会自动生成如下代码
cs代码
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Windows.Media.Imaging;namespace SilverlightCreate {public partial class SilverlightButtons : UserControl{public SilverlightButtons(){InitializeComponent();}/// <summary>/// 自定义控件文本/// </summary>public string Contents{get { return (string)GetValue(ContentsProperty); }set { SetValue(ContentsProperty, value); }}/// <summary>/// 自定义控件图片/// </summary>public ImageSource IconSource{get { return (ImageSource)GetValue(IconSourceProperty); }set { SetValue(IconSourceProperty, value); }}/// <summary>/// 自定义控件背景色/// </summary>public Brush ButtonBackGround{get { return (SolidColorBrush)GetValue(ButtonBackGroundProperty); }set { SetValue(ButtonBackGroundProperty, value); }}/// <summary>/// 自定义控件文字颜色/// </summary>public Brush FontColor{get { return (Brush)GetValue(FontColorProperty); }set { SetValue(FontColorProperty, value); }}/// <summary>/// 自定义控件边框默认颜色/// </summary>public Brush DefaultStroke{get { return (Brush)GetValue(DefaultStrokeProperty); }set { SetValue(DefaultStrokeProperty, value); }}/// <summary>/// 自定义控件边框高亮颜色/// </summary>public Brush HighLightStroke{get { return (Brush)GetValue(HighLightStrokeProperty); }set { SetValue(HighLightStrokeProperty, value); }}/// <summary>/// 自定义控件填充默认颜色/// </summary>public Brush DefaultFill{get { return (Brush)GetValue(DefaultFillProperty); }set { SetValue(DefaultFillProperty, value); }}/// <summary>/// 自定义控件填充高亮颜色/// </summary>public Brush HighLightFill{get { return (Brush)GetValue(HighLightFillProperty); }set { SetValue(HighLightFillProperty, value); }}/// <summary>/// 自定义控件边框厚度/// </summary>public double StrokeThickness{get { return (double)GetValue(StrokeThicknessProperty); }set { SetValue(StrokeThicknessProperty, value); }}/// <summary>/// 自定控件边框圆角x/// </summary>public double RadiusX{get { return (double)GetValue(RadiusXProperty); }set { SetValue(RadiusXProperty, value); }}/// <summary>/// 自定控件边框圆角y/// </summary>public double RadiusY{get { return (double)GetValue(RadiusYProperty); }set { SetValue(RadiusYProperty, value); }}public static readonly DependencyProperty ContentsProperty = DependencyProperty.Register("Contents", typeof(string), typeof(SilverlightButtons), new PropertyMetadata(ContentsChanged));private static void ContentsChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e){SilverlightButtons button = sender as SilverlightButtons;if (button != null){if (e.NewValue != null){String NewValue = e.NewValue as String;button.myText.Text = NewValue;}}else{button.myText.Text = String.Empty;}}public static readonly DependencyProperty IconSourceProperty = DependencyProperty.Register("IconSource", typeof(ImageSource), typeof(SilverlightButtons), new PropertyMetadata(IconSourceSourceChanged));private static void IconSourceSourceChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e){SilverlightButtons button = sender as SilverlightButtons;if (button != null){if (e.NewValue != null){ImageSource source = e.NewValue as ImageSource;button.myImg.Source = source;}}else{button.myImg.Source = null;}}public static readonly DependencyProperty ButtonBackGroundProperty = DependencyProperty.Register("ButtonBackGround", typeof(Brush), typeof(SilverlightButtons), new PropertyMetadata(ButtonBackGroundChanged));private static void ButtonBackGroundChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e){SilverlightButtons button = sender as SilverlightButtons;if (button != null){if (e.NewValue != null){SolidColorBrush brush = e.NewValue as SolidColorBrush;button.myButton.Background = brush;}}else{button.myButton.Background = null;}}public static readonly DependencyProperty FontColorProperty =DependencyProperty.Register("FontColor", typeof(Brush), typeof(SilverlightButtons), new PropertyMetadata(FontColorChanged));private static void FontColorChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e){ SilverlightButtons button = sender as SilverlightButtons;if (button != null){if (e.NewValue != null){SolidColorBrush brush = e.NewValue as SolidColorBrush;button.myText.Foreground = brush;}}elsebutton.myText.Foreground = null;}public static readonly DependencyProperty DefaultStrokeProperty =DependencyProperty.Register("DefaultStroke", typeof(Brush), typeof(SilverlightButtons), new PropertyMetadata(DefaultStrokeChanged));private static void DefaultStrokeChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e){SilverlightButtons button = sender as SilverlightButtons;if (button != null){if (e.NewValue != null){button.myRectangle.Stroke = e.NewValue as Brush;}}else{button.myRectangle.Stroke = new SolidColorBrush(Colors.Transparent);}}public static readonly DependencyProperty HighLightStrokeProperty =DependencyProperty.Register("HighLightStroke", typeof(Brush), typeof(SilverlightButtons), new PropertyMetadata(HighLightStrokeChanged));private static void HighLightStrokeChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e){SilverlightButtons button = sender as SilverlightButtons;if (button != null){if (e.NewValue != null){button.myRectangle.Stroke = e.NewValue as Brush;}}else{button.myRectangle.Stroke = null;}}public static readonly DependencyProperty DefaultFillProperty =DependencyProperty.Register("DefaultFill", typeof(Brush), typeof(SilverlightButtons), new PropertyMetadata(DefaultFillChanged));private static void DefaultFillChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e){SilverlightButtons button = sender as SilverlightButtons;if (button != null){if (e.NewValue != null){button.myRectangle.Fill = e.NewValue as Brush;}}else{button.myRectangle.Fill = new SolidColorBrush(Colors.Transparent);}}public static readonly DependencyProperty HighLightFillProperty =DependencyProperty.Register("HighLightFill", typeof(Brush), typeof(SilverlightButtons), new PropertyMetadata(HighLightFillChanged));private static void HighLightFillChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e){SilverlightButtons button = sender as SilverlightButtons;if (button != null){if (e.NewValue != null){button.myRectangle.Fill = e.NewValue as Brush;}}else{button.myRectangle.Fill = null;}}public static readonly DependencyProperty StrokeThicknessProperty =DependencyProperty.Register("StrokeThickness", typeof(double), typeof(SilverlightButtons), new PropertyMetadata(StrokeThicknessChanged));private static void StrokeThicknessChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e){SilverlightButtons button = sender as SilverlightButtons;if (button != null){if (e.NewValue != null){button.myRectangle.StrokeThickness = Convert.ToDouble(e.NewValue);}}else{button.myRectangle.StrokeThickness = 1;}}public static readonly DependencyProperty RadiusXProperty =DependencyProperty.Register("RadiusX", typeof(double), typeof(SilverlightButtons), new PropertyMetadata(RadiusXChanged));private static void RadiusXChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e){SilverlightButtons button = sender as SilverlightButtons;if (button != null){if (e.NewValue != null){button.myRectangle.RadiusX = Convert.ToDouble(e.NewValue);}}else{button.myRectangle.RadiusX = 0;}}public static readonly DependencyProperty RadiusYProperty =DependencyProperty.Register("RadiusY", typeof(double), typeof(SilverlightButtons), new PropertyMetadata(RadiusYChanged));private static void RadiusYChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e){SilverlightButtons button = sender as SilverlightButtons;if (button != null){if (e.NewValue != null){button.myRectangle.RadiusY = Convert.ToDouble(e.NewValue);}}else{button.myRectangle.RadiusY = 0;}}} }
View Code
自定义控件做好后就可以运用该控件了,如下图,鼠标移上去会出现边框
xaml代码
<UserControl x:Class="SilverlightCreate.CustomControl"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:custom="clr-namespace:SilverlightCreate"mc:Ignorable="d"d:DesignHeight="300" d:DesignWidth="400"><Grid x:Name="LayoutRoot" Background="#007F48"><StackPanel Orientation="Horizontal" Height="30" HorizontalAlignment="Center"><custom:SilverlightButtons x:Name="btnManyou" Contents="漫游" FontColor="White" IconSource="images/tool_manyou.png" ToolTipService.ToolTip="漫游" Margin="5" MouseMove="btnManyou_MouseMove" MouseLeave="btnManyou_MouseLeave" /><custom:SilverlightButtons x:Name="btnDraw" Contents="重画" FontColor="White" IconSource="images/tool_chonghua.png" ToolTipService.ToolTip="重画" Margin="5" MouseMove="btnDraw_MouseMove" MouseLeave="btnDraw_MouseLeave" /></StackPanel></Grid> </UserControl>
View Code
cs代码
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes;namespace SilverlightCreate {public partial class CustomControl : UserControl{public CustomControl(){InitializeComponent();}private void btnManyou_MouseMove(object sender, MouseEventArgs e){ShowBorder(btnManyou);}private void btnManyou_MouseLeave(object sender, MouseEventArgs e){HideBorder(btnManyou);}private void btnDraw_MouseMove(object sender, MouseEventArgs e){ShowBorder(btnDraw);}private void btnDraw_MouseLeave(object sender, MouseEventArgs e){HideBorder(btnDraw);}private void ShowBorder(SilverlightButtons button){button.StrokeThickness = 1;button.HighLightStroke = new SolidColorBrush(Colors.White);button.RadiusX = 10;button.RadiusY = 10;}private void HideBorder(SilverlightButtons button){button.StrokeThickness = 0;}} }
View Code
参考文章
https://social.msdn.microsoft.com/Forums/silverlight/en-US/630cade8-349d-410e-9039-3a4b74c56ac9/silverlight-4-custom-control-binding?forum=silverlightarchieve
相关文章
http://www.cnblogs.com/yayx/archive/2008/06/03/1213126.html
http://developer.51cto.com/art/201003/191692.htm
转载于:https://www.cnblogs.com/ZJ199012/p/4037053.html
Silverlight 用DependencyProperty 自定义ImageButton控件 定义属性相关推荐
- 自定义用户控件显示属性分类、描述、默认值
在网上查了相关资料,大概例子如下: using System.ComponentModel; bool _IsCheck = true; [Bindable(true), DefaultVal ...
- [转] 使用模板自定义 WPF 控件
[转] 使用模板自定义 WPF 控件 ...
- 自定义用户控件的使用
使用VS C#无论是WinForm开发,还是WebForm 开发都会遇到一个问题:在Form布局时,会重复使用相同的一组控件.如下图中的控件 这一组控件是非常常用的,但是如果每一次布局相似的窗体时,都 ...
- Silverlight AutoCompleteBox(自动完成输入框控件)使用方法
在微软的Silverlight 开源控件项目"Silverlight Toolkit"中,提供了一个自动完成输入框控件:AutoCompleteBox. ...
- WPF自定义仪表盘控件
WPF自定义仪表盘控件 一.前言 二.功能实现 一.前言 在学习和工作中使用WPF时,都离不开自定义控件的使用,今天分享一个自己在学习过程中使用到的一个自定义仪表盘控件,感觉挺不错的,在这里分享给大家 ...
- WPF 自定义TabControl控件样式(转)
WPF 自定义TabControl控件样式 一.前言 程序中经常会用到TabControl控件,默认的控件样式很普通.而且样式或功能不一定符合我们的要求.比如:我们需要TabControl的标题能够居 ...
- WPF控件之自定义TextBox控件
首先我们要知道用户控件与自定义用户控件的确保 用户控件 1将多个现有的控件组合成一个可重用的"组". 2不能使用样式和模板. 3继承自UserControl类. 自定义控件 1在现 ...
- WPF 滚动条控件ScrollViewer的使用及自定义滚动条控件(一)
WPF 滚动条控件ScrollViewer的使用及自定义滚动条控件(一) 首先看一下两种空间的运行效果: 左边是自定义滑条控件,右边是自带的滑条控件: **滑条使用方法:**我们在ScrollView ...
- Android View体系(十)自定义组合控件
相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...
最新文章
- PowerEdge M915 – 戴尔打出的又一记虚拟化重拳
- redis多端口启动
- python基础教程 下载-Python基础教程第3版中国PDF电子书免费下载
- SQL Server 2019安装教程
- 函数重载 覆盖 隐藏
- MySQL字符串类型
- 基于keepalived实现haproxy高可用的双主模型配置
- linux scp命令_太麻烦!使用 Linux scp 命令下载文件到 Windows 桌面
- 20165313 课程总结
- 高性能MySQL 第3版(中文)pdf
- 博图15怎么看各种功能块说明_西门子STEP7常用功能块说明
- 学习笔记:微波遥感反演土壤水分——理论模型和经验模型(1)
- Mysql 查询每个班级的成绩最好前三名(并列与不并列的情况)
- STL-造汽车的厂家不造轮子
- 无人机影像的植被覆盖度、叶面积指数估算
- pip安装:Cannot uninstall ''. It is a distutils installed project and thus we cannot accurately....解决办法
- 苹果换原装电池_手机资讯:iPhone 电池最大容量低于 80%换电池选原装还是第三方...
- 哈佛结构与冯诺伊曼结构
- 高阶组件HOC - 小试牛刀
- 红米Note通过卡刷获取root权限教程,附各版本root包