WPF依赖属性和附加属性

说到属性和依赖属性,大家都知道注册依赖属性使用Register方法,注册附加属性则使用RegisterAttached方法。

一般默认依赖属性使用CLR属性进行包装,附加属性使用Get,Set方法进行包装. 
这两者从表面上看两者除了方法不同,其他都是一样的 。

使用依赖属性时,会传入一个属性元数据,但内部定义了一个默认的属性元数据(defaultMetadata ),当依赖属性注册完毕后,则重写了属性元数据(OverrideMetadata),而注册附加属性时,则直接传入参数.这个参数则直接作为了依赖属性的默认元数据。

注意点: 
(1)重写属性元数据是一个合并的过程,所以重写的变更事件并不会触发 
(2)若属性元数据已经注册完毕,同个类型的属性元数据不可重复重写

(3)在SpaceWindow中定义的依赖属性不是通过Register方法来生成的,而是用某个控件(MyButton)的属性的AddOwner方法来完成的,实际上他还可以接受一个元数据的参数,就是接受一个元数据参数,如果增加了这个元数据,就相当于调用了重载元数据OverrideMetadata函数

 

<Window x:Class="依赖属性和附加属性.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"       

        Title="MainWindow" Height="350" Width="525">

    <!--窗口资源-->

    <Window.Resources>

        <!--样式资源:整个窗口的全部按钮-->

        <Style TargetType="Button">

            <Setter Property="Height" Value="36"/>

            <Setter Property="Foreground" Value="Yellow"/>

            <!--内容居中-->

            <Setter Property="HorizontalContentAlignment" Value="Center"/>

        </Style>

        <!--样式资源:部分按钮-->

        <Style x:Key="myBtnSelect" TargetType="Button">

            <!--背景-->

            <Setter Property="Background" Value="Yellow"/>

            <Setter Property="BorderBrush">

                <Setter.Value>

                    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">

                        <GradientStop Offset="0.3" Color="Red"/>

                        <GradientStop Offset="0.3" Color="SkyBlue"/>

                    </LinearGradientBrush>

                </Setter.Value>

            </Setter>

        </Style>

        <Style x:Key="myBtnInsert" TargetType="Button">

            <!--背景-->

            <Setter Property="Background" Value="AliceBlue"/>

            <Setter Property="BorderBrush">

                <Setter.Value>

                    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">

                        <GradientStop Offset="0.3" Color="Blue"/>

                        <GradientStop Offset="0.3" Color="SkyBlue"/>

                    </LinearGradientBrush>

                </Setter.Value>

            </Setter>

        </Style>

    </Window.Resources>

    <Grid>

        <Button x:Name="button" Content="修改" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75"/><!--Button私有-->

 

        <Button Style="{StaticResource myBtnSelect}" x:Name="btn" Content="查询" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" Margin="222,203,221.4,81.8" />

        <Button Style="{StaticResource myBtnInsert}" x:Name="button1" Content="新增" HorizontalAlignment="Left" Margin="222,263,0,0" VerticalAlignment="Top" Width="75"/>

    </Grid>

</Window>

 

看下效果图:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值