[WPF]第一个的自定义控件

初学wpf,弄了好久才慢慢弄懂了一点依赖属性,然后现在搞一个自定义控件来进一步了解了解依赖属性。
新建一个wpf项目,在项目中新建一个用户控件,叫MyEllipse。
MyEllipse.xaml代码如下

<UserControl x:Class="WpfApplication20190830A.MyEllipse"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="30" d:DesignWidth="30">
    <Grid>
        <Ellipse Name="myEllipse" Fill="GreenYellow" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    </Grid>
</UserControl>

控件样子
在这里插入图片描述
上面代码中,是把控件设计高度和宽度都改为30,然后放上一个黄绿色的圆,宽高随控件的宽高而变化,命名为myEllipse到时候方便在cs代码中拿到。
然后去MyEllipse.xaml.cs中注册依赖属性,将其封装为CLR属性,还有在依赖属性中的回调函数根据绑定值做逻辑处理。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication20190830A
{
    /// <summary>
    /// MyEllipse.xaml 的交互逻辑
    /// </summary>
    public partial class MyEllipse : UserControl
    {
        public MyEllipse()
        {
            InitializeComponent();
        }

		/// <summary>
        /// 注册依赖属性MyColorProperty 
        /// DependencyProperty.Register()参数如下
        /// 参数1:MyColor为该依赖属性封装后的CLR属性名
        /// 参数2:typeof(int)为其CLR属性的值类型
        /// 参数3:typeof(MyEllipse)指定了参数作用的域/界面
        /// 参数4:new UIPropertyMetadata(0, changeMyColor),其中0代表默认值,changeMyColor是一个回调函数。
        /// </summary>
        public static readonly DependencyProperty MyColorProperty =
            DependencyProperty.Register("MyColor", typeof(int), typeof(MyEllipse), new UIPropertyMetadata(0, changeMyColor));
            
        /// <summary>
        /// 将MyColorProperty封装成CLR属性
        /// </summary>
        public int MyColor
        {
            get { return (int)GetValue(MyColorProperty); }
            set { SetValue(MyColorProperty, value); }
        }

        /// <summary>
        /// 进行值绑定
        /// </summary>
        /// <param name="obj">控件对象</param>
        /// <param name="r">依赖属性改变值事件参数</param>
        private static void changeMyColor(DependencyObject obj, DependencyPropertyChangedEventArgs r)
        {
            Ellipse ellipse = ((MyEllipse)obj).myEllipse;//拿到圆形控件(默认黄绿色)
            //将传入数值和填充颜色进行绑定
            switch ((int)r.NewValue)
            {
                case 1:
                    ellipse.Fill = new SolidColorBrush(Colors.Black);//填充黑色
                    break;
                case 2:
                    ellipse.Fill = new SolidColorBrush(Colors.Blue);//填充蓝色
                    break;
                case 3:
                    ellipse.Fill = new SolidColorBrush(Colors.Brown);//填充棕色
                    break;
                case 4:
                    ellipse.Fill = new SolidColorBrush(Colors.Red);//填充红色
                    break;
                case 5:
                    ellipse.Fill = new SolidColorBrush(Colors.Pink);//填充粉色
                    break;
                case 6:
                    ellipse.Fill = new SolidColorBrush(Colors.Silver);//填充灰色
                    break;
            }
        }
    }

}

最后是MainWindow.xaml代码

<Window x:Class="WpfApplication20190830A.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:WpfApplication20190830A"
        Title="MainWindow" Height="530" Width="300">
    <StackPanel>
        <my:MyEllipse Width="70" Height="70" Margin="0 10 0 0"></my:MyEllipse>
        <my:MyEllipse Width="70" Height="70" MyColor="0"></my:MyEllipse>
        <my:MyEllipse Width="60" Height="60" MyColor="1"></my:MyEllipse>
        <my:MyEllipse Width="50" Height="50" MyColor="2"></my:MyEllipse>
        <my:MyEllipse Width="40" Height="40" MyColor="3"></my:MyEllipse>
        <my:MyEllipse Width="50" Height="50" MyColor="4"></my:MyEllipse>
        <my:MyEllipse Width="60" Height="60" MyColor="5"></my:MyEllipse>
        <my:MyEllipse Width="70" Height="70" MyColor="6"></my:MyEllipse>
    </StackPanel>
</Window>

效果如下
在这里插入图片描述
从上往下数,第一个圆没有设置MyColor这个属性,所以会自动采用默认值0,第二个圆设置了MyColor=“0”,效果和第一个圆一样。
其他的圆都是传入不同数值,填充了不一样的颜色。

这个自定义控件非常简单,完全适合初学者第一次写自定义控件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值