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的背景透明度会跟着变化。

  • 相关阅读:
    计算机术语
    【转】 物理内存和线性空间
    windows Visual Studio 上安装 CUDA【转载】
    windows Notepad++ 上配置 vs 编译器 , 编译并运行
    单列模式 [转载]
    Java Swing布局管理器GridBagLayout的使用示例 [转]
    五年java工作应具备的技能
    三年java软件工程师应有的技技能
    京东面试题 Java相关
    京东笔试题总结
  • 原文地址:https://www.cnblogs.com/chuhaida/p/3193686.html
Copyright © 2011-2022 走看看