如何在wpf程序中使用DependencyProperty
作为例子,我决定定义一个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的更多相关文章
- 如何在WPF程序中使用ArcGIS Engine的控件
原文 http://www.gisall.com/html/47/122747-4038.html WPF(Windows Presentation Foundation)是美国微软公司推出.NET ...
- 在WPF程序中使用摄像头兼谈如何使用AForge.NET控件(转)
前言: AForge.NET 是用C#写的一个关于计算机视觉和人工智能领域的框架,它包括图像处理.神经网络.遗传算法和机器学习等.在C#程序中使用摄像头,我习惯性使用AForge.NET提供的类库.本 ...
- 在 WPF 程序中应用 Windows 10 真?亚克力效果
原文:在 WPF 程序中应用 Windows 10 真?亚克力效果 从 Windows 10 (1803) 开始,Win32 应用也可以有 API 来实现原生的亚克力效果了.不过相比于 UWP 来说, ...
- 【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?
原文:[msdn wpf forum翻译]如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点? 原文链接:http://social.msdn.microsoft.com/Fo ...
- 解决WPF程序中ListBox ItemsSource变化时不重置ScrollBar的问题
解决WPF程序中ListBox ItemsSource变化时不重置ScrollBar的问题 当我们改变ListBox的ItemsSource时,会发现这样一个问题:数据源变化时,虽然控件中的内容会跟着 ...
- WPF 程序中启动和关闭外部.exe程序
当需要在WPF程序启动时,启动另一外部程序(.exe程序)时,可以按照下面的例子来: C#后台代码如下: using System; using System.Collections.Generic; ...
- 【转】如何在 Android 程序中禁止屏幕旋转和重启Activity
原文网址:http://www.cnblogs.com/bluestorm/p/3665890.html 禁止屏幕随手机旋转变化 有时候我们希望让一个程序的界面始终保持在一个方向,不随手机方向旋转而变 ...
- WPF程序中App.Config文件的读与写
WPF程序中的App.Config文件是我们应用程序中经常使用的一种配置文件,System.Configuration.dll文件中提供了大量的读写的配置,所以它是一种高效的程序配置方式,那么今天我就 ...
- 如何在 Android 程序中禁止屏幕旋转和重启Activity
禁止屏幕随手机旋转变化 有时候我们希望让一个程序的界面始终保持在一个方向,不随手机方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入android ...
随机推荐
- [Compose] 16. Apply multiple functors as arguments to a function (Applicatives)
We find a couple of DOM nodes that may or may not exist and run a calculation on the page height usi ...
- 关于CoordinatorLayout与Behavior的一点分析
Behavior是Android新出的Design库里新增的布局概念.Behavior只有是CoordinatorLayout的直接子View才有意义.可以为任何View添加一个Behavior.Be ...
- UTC时间与当地时间的转换关系?
UTC时间与当地时间转换关系? 一.总结 1.UTC +时区差=本地时间 2.UTC是世界统一时间 二.UTC时间是什么 1.UTC时间 协调世界时,又称世界统一时间.世界标准时间.国际协调时间.由于 ...
- OSGI简介—HelloWorld
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wanghuan203/article/details/13631713 本次介绍的 HelloWor ...
- AndroidMainifest标签使用说明3——<activity-alias>
格式: <activity-alias android:enabled=["true" | "false"] android:exported=[&quo ...
- nth-child与nth-of-type
nth-of-type这个CSS3伪类还从来没有用过,今天好好研究一番,发现还是有用的.现在下面的Demo <!DOCTYPE html> <html> <head> ...
- 微信小程序来了 要杀死一切App
从昨晚一些自媒体开始陆续爆料,到微信官方宣布,这一次只隔了短短几小时.就在刚刚,今天早晨,微信官方正式宣布“应用号”开始内测,并暂定名为“小程序”. 应用号变成小程序 腾讯高级副总裁张小龙也在其朋友圈 ...
- TensorFlow 实战(三)—— 实现常见公式
tf.reduce_mean (求向量的均值)等价于 1N∑i=1Nxi 1. 对权值矩阵进行 l2 正则 def variable_with_weight_loss(shape, stddev, w ...
- Java开发环境安装,环境变量
下载地址:www.oracle.com Java 9下载地址:https://www.oracle.com/technetwork/java/javase/downloads/java-archive ...
- WPF 渲染级别
原文:WPF 渲染级别 很少人会知道 WPF 也可以知道当前的显卡能支持的渲染级别. 根据显卡的不同,包括显存.纹理等的支持是否打到要求,指定渲染级别. 使用 System.Windows.Media ...