原文:WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性

如果你要自定义一个图片按钮控件,那么如何在主窗体绑定这个控件上图片的Source呢?

我向大家介绍一个用 依赖属性(DependencyProperty) 实现的方法。

关于依赖属性的介绍,请大家参考:http://msdn.microsoft.com/zh-cn/library/ms752914.aspx

首先我们看用户控件中如何定义这个依赖属性:

1.新建一个用户控件,命名为ImageButton

2.在CS定义如下代码:

public partial class ImageButton : UserControl
    {
        public ImageSource imgSource
        {
            get { return (ImageSource)GetValue(ImageSourceProperty); }
            set { SetValue(ImageSourceProperty, value); }
        }
        public static readonly DependencyProperty ImageSourceProperty;           
        public ImageButton()
        {
            InitializeComponent();
        }
        static ImageButton()
        {
            var metadata = new FrameworkPropertyMetadata((ImageSource)null);
            ImageSourceProperty = DependencyProperty.RegisterAttached("imgSource", typeof(ImageSource), typeof(ImageButton), metadata);
        }
    }

以上代码,我们定义了控件中,Image 的Source属性。

3.在控件的xaml中,添加一个Image控件

完整代码如下:

<UserControl Name="UC" x:Class="TouchScreen12.Controls.ImageButton"
             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="167" d:DesignWidth="177">
    <Grid x:Name="myGrid" Margin="0">
        <Image x:Name="myImage" Source="{Binding ElementName=UC, Path=imgSource}" Width="Auto" Height="Auto" Stretch="Fill" Margin="0,0,0,0"/>   
    </Grid>
</UserControl>

好了,现在这个基础的图片按钮控件就初步完成了。

在工程的主窗体添加这个控件

<imgBut:ImageButton Height="{Binding bHeight}" HorizontalAlignment="Center" x:Name="image1" VerticalAlignment="Center" Width="{Binding bWidth}" Margin="0" imgSource="{Binding Image1Path}"/>

大家可以把图片的路径直接绑定给这个控件了!

WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性相关推荐

  1. ASP.NET开发:在用户控件中添加属性

    在WEB开发中,可重用的代码我们可以把它写成一个通用模块供需要的地方来引用.本文就是介绍在ASP.NET的web编程时,如何在用户控件中添加属性,实现这种方法:举例说明详解. 在WEB开发中经常有一些 ...

  2. 关于从页面中获取用户控件中的其它控件(如DropDownList)事件的方法

    在项目中经常把一些经常使用的代码做成用户控件以提高代码的可重用性, 一个经常遇到的就是在页面中调用用户控件中的服务器控件的事件,下面给出简单的代码示列. 我们在一个用户控件(MaterialRepor ...

  3. 控件中一些常用的属性和事件

    1.1常用基本属性 1)Name:表示控件的名称. 2)Enabled:表示控件是否可以对用户交互做出响应. 3)Font:表示控件中显示文字的字体格式,包括字体名称.字号以及是否以斜体.加粗和下划线 ...

  4. 用户控件中动态加入脚本引用

    用户控件中动态加入脚本引用,添加前先判断是否已经有引用,没有才添加. //××××.ascx protected void Page_Load(object sender, EventArgs e){ ...

  5. 在用户控件中用户登录后台脚本判断

    在用户控件中用户登录后台脚本判断写法  if (!IsPostBack)         {                         imagelogin.Attributes.Add(&qu ...

  6. 用户控件中使用相对路径问题

    在用户控件中使用相对路径,会因为引用控件的页面的不同路径而产生问题.在用户控件里最好使用以站点根目录开始指定相对路径,比如你的asp.net应用程序名为:myapp,你的图片是 myapp/myima ...

  7. 如何在Web用户控件中引用样式表中的样式

    如何在Web用户控件中引用样式表中的样式 <%@ Control Language="C#" AutoEventWireup="true" CodeFil ...

  8. C# 在用户控件中添加自定义事件

    /// <summary> /// 用户控件 /// </summary> public partial class UCMyControl : UserControl {// ...

  9. 如何在用户控件中操作页面中的控件?

    一般来讲我们会把功能集中在ASCX文件实现,以便能够多次使用,但在某种情况下,我们可能会用到对用户控件所在的页面容器进行操作. 其实如果想一下,道理也很简单,如果ASCX被使用了,其会出现在页面容器中 ...

最新文章

  1. AI换脸在电竞圈火了!大司马PDD大秀肌肉辣舞,网友:上头,流鼻血了
  2. python内置函数用来返回数值型序列中所有元素之和_语句x = 3==3, 5执行结束后,变量x的值为_学小易找答案...
  3. [转]世界十大最美历史遗迹[组图]。
  4. 什么是长期存储在计算机外存上的有结构,数据库是长期存储在计算机主存内
  5. python 检查域名是否可以访问_糖尿病人是否都要做喝糖水的检查?结果可以说明胰岛功能水平吗?...
  6. krb5安装包 linux_Linux:krb5
  7. Java代码动态分析JProfiler 13 for Mac
  8. 企业图谱强势来袭!玩转企业大数据
  9. 投区块链?听听当下硅谷最火的四条投资军规
  10. 2021-08-27
  11. 安装了Adobe Acrobat却没有pdf虚拟打印机
  12. 【转】对程序中常出现的EINT、DINT、ERTM、DRTM的理解
  13. Layim 自定义聊天界面
  14. 计算机教室的英语单词怎么写的,小学的英语单词怎么写
  15. 35岁仍然落魄,有这3个苗头将大器晚成,你要刮目相看,主动结交
  16. 海康威视 2021 春招面试题
  17. Python环境搭建之OpenCV
  18. 什么是 metaprogramming
  19. cerr与cout的区别
  20. 试探讨暴风影音2014笔试题

热门文章

  1. oracle10g 开机自启动
  2. 不让自己的应用程序在桌面的图标列表里启动显示的方法
  3. Android ListView滑动后背景变黑
  4. (Application下)组件(所在的)进程创建时,创建Application
  5. repo 的用法和理解
  6. 《机器学习导论》和《统计机器学习》学习资料:张志华教授
  7. Java集合—哈希(hash)表
  8. Python的运算符与表达式
  9. linux下mysql开启远程访问权限及防火墙开放3306端口(mysql开放host访问权限)
  10. 对 Java 集合的巧妙利用