WPF---依赖属性(二)
一、概要
我们将会通过一个简单的综合例子来阐述下依赖属性的变化。
场景:我们在一个文本框中输入一个数字,然后对应的panel中会出现对应的椭圆,椭圆的个数与输入的文本相同。
我们在MainWindow中定义一个名字叫CountProperty的依赖属性,该属性关联到一个回调方法OnCountChanged,当依赖属性发生变化的时候,会触发该方法。
在文本框的事件处理程序来动态修改依赖属性的值,使回调方法OnCountChanged触发,然后在这个函数中画出椭圆。
参考代码如下:
1 using System.Windows;
2 using System.Windows.Controls;
3 using System.Windows.Media;
4 using System.Windows.Shapes;
5
6 namespace DependencyDemo
7 {
8 /// <summary>
9 /// Interaction logic for MainWindow.xaml
10 /// </summary>
11 public partial class MainWindow : Window
12 {
13 public MainWindow()
14 {
15 InitializeComponent();
16 }
17 public int Count
18 {
19 get { return (int)GetValue(CountProperty); }
20 set { SetValue(CountProperty, value); }
21 }
22
23 // Using a DependencyProperty as the backing store for Count. This enables animation, styling, binding, etc...
24 public static readonly DependencyProperty CountProperty =
25 DependencyProperty.Register("Count", typeof(int), typeof(MainWindow), new FrameworkPropertyMetadata(new PropertyChangedCallback(OnCountChanged)));
26
27 public static void OnCountChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
28 {
29 MainWindow win = d as MainWindow;
30 win.wrapPanel?.Children.Clear();
31 int myCount = (int)e.NewValue;
32 for (int i = 0; i < myCount; i++)
33 {
34 win.wrapPanel?.Children.Add(new Ellipse() { Height = 20, Width = 20, Stroke = Brushes.Red, Margin = new Thickness(1) });
35 }
36 }
37
38 private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
39 {
40 int myCount = 0;
41 bool isSuccess = int.TryParse(this.tbInput.Text, out myCount);
42 if(isSuccess && myCount > 0)
43 {
44 Count = myCount;
45 }
46 }
47 }
48 }
1 <Window x:Class="DependencyDemo.MainWindow"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:local="clr-namespace:DependencyDemo"
7 mc:Ignorable="d"
8 Title="MainWindow" Height="350" Width="315">
9 <Grid>
10 <Grid.RowDefinitions>
11 <RowDefinition Height="21*"/>
12 <RowDefinition Height="139*"/>
13 </Grid.RowDefinitions>
14 <StackPanel Orientation="Horizontal">
15 <Label Content="椭圆个数:" FontSize="16"></Label>
16 <TextBox Width="200" Margin="5" TextChanged="TextBox_TextChanged" Name="tbInput"></TextBox>
17 </StackPanel>
18 <ScrollViewer Grid.Row="1">
19 <WrapPanel Name="wrapPanel" >
20 </WrapPanel>
21 </ScrollViewer>
22 </Grid>
23 </Window>
运行结果如下:
WPF---依赖属性(二)的更多相关文章
- WPF自学入门(五)WPF依赖属性
在.NET中有事件也有属性,WPF中加入了路由事件,也加入了依赖属性.最近在写项目时还不知道WPF依赖属性是干什么用的,在使用依赖项属性的时候我都以为是在用.NET中的属性,但是确实上不是的,通过阅读 ...
- WPF依赖属性详解
WPF依赖属性详解 WPF 依赖属性 英文译为 Dependency Properties,是WPF引入的一种新类型的属性,在WPF中有着极为广泛的应用,在WPF中对于WPF Dependency P ...
- WPF依赖属性值源(BaseValueSource)
原文:WPF依赖属性值源(BaseValueSource) WPF依赖属性提供一个机制,可以获取依赖属性提供值的来源 其以BaseValueSource枚举表示 1.Default public ...
- WPF依赖属性(续)(3)依赖属性存储
原文:WPF依赖属性(续)(3)依赖属性存储 在之前的两篇,很多朋友参与了讨论,也说明各位对WPF/SL计数的热情,对DP系统各抒已见,当然也出现了一些分歧. 以下简称DP为依赖属性 ...
- WPF依赖属性(续)(1)
原文:WPF依赖属性(续)(1) 之前有写过几篇文章,详细地介绍了依赖属性的基本使用方法,如果你不想了解其内部实现机制的话,那么通过那两篇文章的介绍,足以应付平时的应用 ...
- WPF依赖属性(续)(2)依赖属性与附加属性的区别
原文:WPF依赖属性(续)(2)依赖属性与附加属性的区别 接上篇,感谢各位的评论,都是认为依赖属性的设计并不是为了节省内存,从大的方面而讲是如此.样式,数据绑定,动画样样都离不开它.这篇 ...
- 监听WPF依赖属性
原文:监听WPF依赖属性 当我们使用依赖属性的时候,有时需要监听它的变化,这在写自定义控件的时候十分有用, 下面介绍一种简单的方法. 如下使用DependencyPropertyDescripto ...
- WPF依赖属性的正确学习方法
前言 我在学习WPF的早期,对依赖属性理解一直都非常的不到位,其恶果就是,我每次在写依赖属性的时候,需要翻过去的代码来复制黏贴. 相信很多朋友有着和我相同的经历,所以这篇文章希望能帮助到那些刚刚开始学 ...
- WPF 依赖属性前言
WPF 依赖属性前言 在.net中,我们可以属性来获取或设置字段的值,不需要在编写额外的get和set方法,但这有一个前提,那就是需要在对象中拥有一个字段,才能在此字段的基础上获取或设置字段的值, ...
- 【demo练习二】:WPF依赖属性的练习
2016-10-11 依赖属性demo小样: 要求:在窗口中点击按钮,利用设置“依赖属性”把Label和TextBox控件里的属性值进行改变. ============================ ...
随机推荐
- CF466D题解
思路: 我们首先处理出每个位子需要被多少个区间覆盖才能变成 \(h\) .即 $a_i=h-a_i $ 同时设定 \(b\) 序列为 \(a\) 序列的差分系列 如果 \(b_i==1\) ,很显然, ...
- 浅析vue-cli脚手架命令的执行过程
上一篇文章,已经大致了解脚手架是什么以及脚手架是如何工作的.接下来,稍微深入一下脚手架的工作过程(以vue-cli为例).首先抛出3个问题: 1.明明全局安装的是@vue/cli,最后执行的命令却是v ...
- React组件三大属性之 refs
React组件三大属性之 refs refs属性 1) 组件内的标签都可以定义ref属性来标识自己 a. <input type="text" ref={input => ...
- Redis学习——常用小功能
一.慢查询分析(查询日志:所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似的功 ...
- 安装react后运行报错
错误提示:npm WARN checkPermissions Missing write access to C:\Users\LXD\Desktop\webpack-base\node_module ...
- c语言数据拼包
单片机数据拼包 对于数据包拼包方式常规方式有: 数组 指针 结构体 流 下文将此三种方式分别列举此数据包的实现. 然后对比优缺点. 本文举例数据包协议: 包头 长度Length 消息类型 消息序列号S ...
- [考试总结]noip18
发现之前咕掉了这个考试的总结. 今天就把它给补上. 这也是一个炸裂的一场 开局以为 \(T1\) 可做,然而事实证明我又错了... 莽了一个随机化上去,轻松过了所有样例... 以为稳了 然而挂掉了.. ...
- Java 反射(一)反射简介、原理和应用场景
目录 一.动态语言和动态语言的比较 动态语言 静态语言 二.反射 简介 反射的常见使用 1. 代码编辑器 2. Spring等框架的IoC容器 3. 和注解的配合使用 原理 反射优缺点 调试查看 Cl ...
- 分布式ID(CosId)之号段链模式性能(1.2亿/s)解析
分布式ID(CosId)之号段链模式性能(1.2亿/s)解析 上一篇文章<分布式ID生成器(CosId)设计与实现>我们已经简单讨论过CosId的设计与实现全貌. 但是有很多同学有一些疑问 ...
- Linux必知必会的命令全集(持续更新)
Linux有超过五百多种命令,每个命令还有十几二十种选项,令人抓狂,本文旨在整理本人工作常用的Linux命令,希望对大家有所帮助! 1.cd 跳转文件夹 最常用的命令,没有之一. cd # 进入 ...