作为例子,我决定定义一个MyBorderEx,在WPF常用的"Border"控件中创建一个名为Transparency的属性,来指示它的透明度,这个属性值在0-255间变化,255表示全透明,0表示完全不透明。

DependecyProperty提供了属性改变通知的功能,我们可以利用DependencyProperty的这个功能,定义一个transparencyPropertyChangedCallback函数,在属性值变化(注意,这里指DependencyProperty的值发生变化而不是我们定义的"CLR wapper"的Transparency属性)时修改Opacity属性。我们现在先这样做,后面的Post中我会使用更漂亮(正统)的方式解决这个问题,完整代码如下:

class MyBorderEx:Border
{
public MyBorderEx()
{
//初始化时默认给定一个背景色
Background = Brushes.Blue;
}
public readonly static DependencyProperty TransparencyDependency =
DependencyProperty.Register(
"Transparency",
typeof(Double),
typeof(MyBorderEx),
new PropertyMetadata(new PropertyChangedCallback(transparencyPropertyChangedCallback))
);

static void transparencyPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
MyBorderEx border = (sender as MyBorderEx);
if (border != null)
{
border.Opacity =1 - Convert.ToDouble(e.NewValue) / 255;
}
}

public Double Transparency
{
get { return (Double)GetValue(TransparencyDependency); }
set { SetValue(TransparencyDependency, value); }
}
}

使用了DependencyProperty的属性可以用作数据绑定目标,我们在Window上放一个Slider测试一下数据绑定效果。目标:使用Slider动态改变Border的透明度,我全部使用XAML实现,只有很简单的两行代码

<clr:MyBorderEx x:Name="bord" Transparency="{Binding ElementName=slider1, Path=Value}"></clr:MyBorderEx>
<Slider Grid.Row="1" HorizontalAlignment="Left" Name="slider1" Width="130" Value="50" Minimum="0" Maximum="255" />

简单地说,把bord的Transparency绑定在slider1的Value属性上了。跑一下程序,你会发现拖动Slider,bord的背景透明度会跟着变化。

如何在wpf程序中使用DependencyProperty的更多相关文章

  1. 如何在WPF程序中使用ArcGIS Engine的控件

    原文 http://www.gisall.com/html/47/122747-4038.html WPF(Windows Presentation Foundation)是美国微软公司推出.NET ...

  2. 在WPF程序中使用摄像头兼谈如何使用AForge.NET控件(转)

    前言: AForge.NET 是用C#写的一个关于计算机视觉和人工智能领域的框架,它包括图像处理.神经网络.遗传算法和机器学习等.在C#程序中使用摄像头,我习惯性使用AForge.NET提供的类库.本 ...

  3. 在 WPF 程序中应用 Windows 10 真?亚克力效果

    原文:在 WPF 程序中应用 Windows 10 真?亚克力效果 从 Windows 10 (1803) 开始,Win32 应用也可以有 API 来实现原生的亚克力效果了.不过相比于 UWP 来说, ...

  4. 【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?

    原文:[msdn wpf forum翻译]如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点? 原文链接:http://social.msdn.microsoft.com/Fo ...

  5. 解决WPF程序中ListBox ItemsSource变化时不重置ScrollBar的问题

    解决WPF程序中ListBox ItemsSource变化时不重置ScrollBar的问题 当我们改变ListBox的ItemsSource时,会发现这样一个问题:数据源变化时,虽然控件中的内容会跟着 ...

  6. WPF 程序中启动和关闭外部.exe程序

    当需要在WPF程序启动时,启动另一外部程序(.exe程序)时,可以按照下面的例子来: C#后台代码如下: using System; using System.Collections.Generic; ...

  7. 【转】如何在 Android 程序中禁止屏幕旋转和重启Activity

    原文网址:http://www.cnblogs.com/bluestorm/p/3665890.html 禁止屏幕随手机旋转变化 有时候我们希望让一个程序的界面始终保持在一个方向,不随手机方向旋转而变 ...

  8. WPF程序中App.Config文件的读与写

    WPF程序中的App.Config文件是我们应用程序中经常使用的一种配置文件,System.Configuration.dll文件中提供了大量的读写的配置,所以它是一种高效的程序配置方式,那么今天我就 ...

  9. 如何在 Android 程序中禁止屏幕旋转和重启Activity

    禁止屏幕随手机旋转变化 有时候我们希望让一个程序的界面始终保持在一个方向,不随手机方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入android ...

随机推荐

  1. 蓝牙简单配对(Simple Pairing)协议及代码流程简述

    kangear注: 文章转自:http://blog.csdn.net/myxmu/article/details/12217135 原文把图给搞丢了.可是文章太好了,这个时候我就发挥多年的Googl ...

  2. js进阶 9-11 select选项框如何动态添加和删除元素

    js进阶 9-11 select选项框如何动态添加和删除元素 一.总结 一句话总结: 二.js进阶 9-11 select选项框如何动态添加和删除元素 1.案例说明 2.相关知识 Select 下拉列 ...

  3. Lucene + Pinyin4J 提供首字母搜索(——)

    遇到一个集团需求,要求在地址查询时候提供拼音搜索,第一反应应该不难,不过实现过程中却一波三折. 1.第一步是讲字段首字母进行索引,具体可以使用Pinyin4j提供的方法完成. 2.原来系统用的luce ...

  4. Erlang入门

    Erlang简史(翻译) Erlang入门(二)—并发编程 Erlang入门(三)——分布式编程 Erlang入门(四)——错误处理和鲁棒性 Erlang入门(五)——补遗

  5. NOIP模拟 MST - 类次小生成树

    题目大意: 给一张无向图,可以将图中权值为v的边修改为k-v,求修改后的最小生成树边权和. 题目分析: 最小生成树的环切定理:任何非树边一定比对应树链上的所有边权值要大.否则我们可以将链上最大的树边删 ...

  6. BZOJ 3524 - 主席树

    传送门 题目分析 标准主席树,按照位置插入每个数,对于询问l, r, 在l-1,r两树上按照线段树搜索次数大于(r - l + 1) / 2的数. code #include<bits/stdc ...

  7. 【b404】虫食算

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单 ...

  8. Zygote总结

    Zygote是由init进程通过解析 init.zygote.rc 文件而创建的,zygote所对应的可执行程序 app_process,所对应的源文件是App_main.cpp,进程名为zygote ...

  9. Notepad++中删除连续的任意n行

    使用Notepad++里的行标记功能,可以删除指定的任意n行. 案例1,删除sample2.dat里的第201行到第10000行.方法如下: (1) 用户NotePad++打开sample2.dat, ...

  10. Video processing systems and methods

    BACKGROUND The present invention relates to video processing systems. Advances in imaging technology ...