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

  • 相关阅读:
    ORACLE增删改查以及case when的基本用法
    ORACLE自增函数,一般函数
    Charles下载与破解方法
    ORACLE常见问题收集
    SpringBoot项目 org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Jetty servlet container报错
    Cordova搭建环境与问题小结
    redis集群搭建
    centos下的redis一键安装shell脚本
    爬虫那些事儿
    Scrapy爬虫框架基本使用
  • 原文地址:https://www.cnblogs.com/chuhaida/p/3193686.html
Copyright © 2020-2023  润新知