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控件里的属性值进行改变. ============================ ...
随机推荐
- C语言:基本数据类型及表示范围
类型名称 标识符 printf()标志 占据 范围 无符号 unsigned 范围 类型名称 类型标识符 printf标志 占字节数 表示范围 ...
- C语言:宏完美定义
#include <stdio.h> #define M (n*n+3*n) #define M1 n*n+3*n int main(){ int sum, n; printf(" ...
- Day11继承、封装、多态-面向对象编程(2)
封装 我们设计程序要追求 高内聚,低耦合 . 高内聚:类的内部数据操作细节自己完成,不允许外部干涉 低耦合:仅暴露少量方法给外部使用 封装(数据的隐藏) 通常,应禁止直接访问一个对象中数据的实际表示, ...
- 使用adb如何批量给设备安装apk
win系统 1.首先我们需要在本地建一个文件夹apks,然后把所要安装的apk放进去 2.打开dos窗口使用for循环进行安装即可(前提你的电脑已经连接上了设备,输入adb devices可查看) f ...
- 第二章 Vant的v-cell的v-for使用
遍历加载list数据,类似el-table 一.问题描述 由于VantUI中没有类似于el-table的table组件,看官网的范例,只找到了cell组件有v-for
- ifix 自动化(Automation)错误弹窗的解决方案
在先前ifix项目中添加了语音模块,然后概率性跳出自动化(Automation)错误弹窗,先前分析了很多种原因,从代码的冗余,编码等角度进行了优化,效果不是很理想,仍然会概率性出现.经过反反复复大约3 ...
- 微信小程序对接显示阿里云数据库数据
现实需求 在项目中需求,有时候现场设备发生故障,需要远程的人员知道.除了邮件方式,以微信小程序的方式也很好.今天进行尝试,并制作了一个demo版本. 1.微信小程序申请制作前端 1.1lists文件( ...
- 论文笔记:(ICCV2019)KPConv: Flexible and Deformable Convolution for Point Clouds
目录 摘要 一.引言 二.相关工作 投影网络 图卷积网络 逐点多层感知器网络 点卷积网络 三.核点卷积 3.1由点定义的核函数 3.2刚性的或可变形的核 3.3核点网络层 3.4核点网络架构 四.实验 ...
- Go语言常见的坑
目录 1. 可变参数是空接口类型 2. 数组是值传递 3.map遍历是顺序不固定 4. 返回值被屏蔽 5.recover必须在defer函数中运行 6. main函数提前退出 7.通过Sleep来回避 ...
- CF466C 题解
Description 给定一个数组,求有多少组 \(i,j\) 将整个数组分成和相等的三个数组. Solution 从左往右看一遍,记录每一个 \(i\) 使得 \(\sum_{k=1}^i a_k ...