• WPF:依赖属性的应用


    依赖属性与一般属性相比,提供了对资源引用、样式、动画、数据绑定、属性值继承、元数据重载以及WPF设计器的继承支持功能的支持。

    下面的这个Demo来自《葵花宝典--WPF自学手册》。

    1、MainWindow.xaml

     1 <Window x:Class="WpfApplication1.MainWindow"
     2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     4         xmlns:sys="clr-namespace:System;assembly=mscorlib"
     5         xmlns:local="clr-namespace:WpfApplication1"
     6         Title="MainWindow" Height="350" Width="525">
     7     <Window.Resources>
     8         <SolidColorBrush x:Key="MyBrush" Color="Gold"/>
     9         <Style x:Key="GreenButtonStyle">
    10             <Setter Property="Control.Background" Value="Green"/>
    11         </Style>
    12         <local:BindingData x:Key="myDataSource">
    13             
    14         </local:BindingData>
    15     </Window.Resources>
    16     <Grid>
    17         <Grid.RowDefinitions>
    18             <RowDefinition/>
    19             <RowDefinition/>
    20             <RowDefinition/>
    21         </Grid.RowDefinitions>
    22         <Grid.ColumnDefinitions>
    23             <ColumnDefinition/>
    24             <ColumnDefinition/>
    25             <ColumnDefinition/>
    26             <ColumnDefinition/>
    27         </Grid.ColumnDefinitions>
    28         
    29         <Label HorizontalAlignment="Center" VerticalAlignment="Center">
    30             资源支持
    31         </Label>
    32         <!--金色按钮的背景属性引用了画刷资源-->
    33         <Button Grid.Row="0" Grid.Column="1" Name="resourceBtn" Background="{DynamicResource MyBrush}">
    34             金色按钮
    35         </Button>
    36         <Label Grid.Row="0" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center">
    37             样式支持
    38         </Label>
    39         <!--绿色按钮的Style属性引用了样式资源 -->
    40         <Button Grid.Row="0" Grid.Column="3" Name="typeBtn" Style="{StaticResource GreenButtonStyle}">
    41             绿色按钮
    42         </Button>
    43         <Label Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center">
    44             动画支持
    45         </Label>
    46         <!--动画按钮的背景属性支持动画-->
    47         <Button Grid.Row="1" Grid.Column="1" Name="animationBtn">
    48             动画按钮
    49             <Button.Background>
    50                 <SolidColorBrush x:Name="AnimBrush"/>
    51             </Button.Background>
    52             <Button.Triggers>
    53                 <EventTrigger RoutedEvent="Button.Loaded">
    54                     <BeginStoryboard>
    55                         <Storyboard>
    56                             <ColorAnimation Storyboard.TargetName="AnimBrush"
    57                                             Storyboard.TargetProperty="(SolidColorBrush.Color)"
    58                                             From="Red" To="Green" Duration="0:0:5"
    59                                             AutoReverse="True" RepeatBehavior="Forever"/>
    60                         </Storyboard>
    61                     </BeginStoryboard>
    62                 </EventTrigger>
    63             </Button.Triggers>
    64         </Button>
    65         <Label Grid.Row="1" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center">
    66             数据绑定支持
    67         </Label>
    68         <!--按钮对绑定数据的支持-->
    69         <Button Grid.Row="1" Grid.Column="3" Name="bindingBtn" Background="{Binding Source={StaticResource myDataSource},Path=ColorName}">
    70             被绑定为红色!
    71         </Button>
    72         <!--依赖属性改变相应元素的字体大小-->
    73         <Label Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center">
    74             属性继承支持
    75         </Label>
    76         <Button Grid.Row="2" Grid.Column="1" Name="FontSizeWinBtn" Click="FontSizeWinBtn_Click">
    77             设置窗口字体:16
    78         </Button>
    79         <Button Grid.Row="2" Grid.Column="2" Name="FontSizeBtn" Click="FontSizeBtn_Click">
    80             设置按钮字体:8
    81         </Button>
    82         <Button Grid.Row="2" Grid.Column="3" Name="ResetFontSizeBtn" Click="ResetFontSizeBtn_Click">
    83             重置窗口字体:12
    84         </Button>
    85     </Grid>
    86 
    87 </Window>

    2、BindingData.cs

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace WpfApplication1
     8 {
     9     class BindingData
    10     {
    11         public BindingData()
    12         {
    13             ColorName = "Red";
    14         }
    15 
    16         private string name = "Red";
    17         public string ColorName
    18         {
    19             get { return name; }
    20             set
    21             {
    22                 name = value;
    23 
    24             }
    25         }
    26     }
    27 }

    3、MainWindow.xaml.cs

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Windows;
     7 using System.Windows.Controls;
     8 using System.Windows.Data;
     9 using System.Windows.Documents;
    10 using System.Windows.Input;
    11 using System.Windows.Media;
    12 using System.Windows.Media.Imaging;
    13 using System.Windows.Navigation;
    14 using System.Windows.Shapes;
    15 
    16 namespace WpfApplication1
    17 {
    18     /// <summary>
    19     /// Interaction logic for MainWindow.xaml
    20     /// </summary>
    21     public partial class MainWindow : Window
    22     {
    23         private double _oldFontSize = 0;
    24         public MainWindow()
    25         {
    26             InitializeComponent();
    27 
    28             _oldFontSize = FontSize;
    29         }
    30         //改变窗体所有元素的字体大小
    31         private void FontSizeWinBtn_Click(object sender, RoutedEventArgs e)
    32         {
    33             FontSize = 16;
    34         }
    35         //仅改变该按钮的字体大小
    36         private void FontSizeBtn_Click(object sender, RoutedEventArgs e)
    37         {
    38             this.FontSizeBtn.FontSize = 8;
    39         }
    40         //恢复字体大小
    41         private void ResetFontSizeBtn_Click(object sender, RoutedEventArgs e)
    42         {
    43             FontSize = _oldFontSize;
    44             this.FontSizeBtn.FontSize = _oldFontSize;
    45         }
    46 
    47     }
    48 }

    4、运行结果

     

    注意,

    在第一次点击“设置窗口字体:16”的按钮时,窗口内所有字体都变成了16号大小的字体,因为这时,窗口内的元素都没有设置过FontSize这个属性,所以继承了窗口的FontSize属性值;

    点击"设置按钮字体:8"按钮时,只有该按钮的字体变成8号,因为事件处理函数中只对它的FontSize属性赋值(this.FoniSizeBtn.FontSize=8;)。

    之后,再次点击“设置窗口字体:16”的按钮时,"设置按钮字体:8"按钮的字体不会随之变成16号字体,因为该按钮的FontSize属性已经赋值过了,它就不再继承使用窗口的FontSize属性值了。

  • 相关阅读:
    android游戏开发框架libgdx的使用(完)—杂谈Libgdx
    android游戏开发框架libgdx的使用(二十三)—使用Universal Tween Engine实现动画效果
    android游戏开发框架libgdx的使用(二十四)—physicsbodyeditor配合Box2D加快开发
    android游戏开发框架libgdx的使用(二十二)—利用TABLELAYOUT进行布局
    android游戏开发框架libgdx的使用(二十一)—使用TTF字库支持中文
    基础工具GuavaLibraries学习笔记(一)
    python编程之元组、列表、集合的区分
    python调用海康威视的摄像头,实时显示监控内容
    文件批量重命名
    按钮样式
  • 原文地址:https://www.cnblogs.com/tt2015-sz/p/4751416.html
Copyright © 2020-2023  润新知