zoukankan      html  css  js  c++  java
  • 如何在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的背景透明度会跟着变化。

  • 相关阅读:
    php2
    11-14php
    三层嵌套
    常见的浏览器兼容
    css中的一些问题及解决方法
    css
    html
    测试题
    正则表达式
    Math对象
  • 原文地址:https://www.cnblogs.com/chuhaida/p/3193686.html
Copyright © 2011-2022 走看看