zoukankan      html  css  js  c++  java
  • 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;
                    }
                }
                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;
                }
            }
            
        }
    }
    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

  • 相关阅读:
    HDU 1213 How Many Tables 并查集 寻找不同集合的个数
    哈哈哈哈哈
    P2251 质量检测(ST表)
    poj3264Balanced Lineup(倍增ST表)
    bzoj1088扫雷(搜索)
    P2258 子矩阵(dp)
    codevs1369 xth 砍树(线段树)
    5.3QBXT模拟赛
    codevs1690 开关灯(线段树)
    zhw大神线段树姿势
  • 原文地址:https://www.cnblogs.com/ZJ199012/p/4037053.html
Copyright © 2011-2022 走看看