说到属性和依赖属性,大家都知道注册依赖属性使用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>
看下效果图: