为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>
下面开始自定义属性内容,自定义属性要用 依赖属性类 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; } } else button.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; } } } }
自定义控件做好后就可以运用该控件了,如下图,鼠标移上去会出现边框
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>
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; } } }
参考文章
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