C# WPF编程-元素绑定

C# WPF编程-元素绑定

  • 将元素绑定到一起
    • 绑定表达式
    • 绑定错误
    • 绑定模式
    • 代码创建绑定
    • 移除绑定
    • 使用代码检索绑定
    • 多绑定
    • 绑定更新
    • 绑定延时

数据绑定是一种关系,该关系告诉WPF从源对象提取一下信息,并用这些信息设置目标对象的属性。目标属性始终是依赖项属性,通常位于WPF元素中,WPF数据绑定的最终目标是在用户界面中显示一下信息。

将元素绑定到一起

数据绑定的最简单情形是,源对象是WPF元素而且源属性是依赖项属性。依赖项属性具有内置的更改通知支持。当源对象中改变属性值时会立即更新目标对象中的绑定属性。

简单示例,通过Slider控制TextBlock文本字体大小:

    <StackPanel><Slider x:Name="sliderFontSize" Margin="3" Minimum="1" Maximum="40" Value="10"TickFrequency="1" TickPlacement="TopLeft"></Slider><TextBlock x:Name="textBlock" Margin="10" Text="简单文本内容"FontSize="{Binding ElementName=sliderFontSize, Path=Value}"></TextBlock></StackPanel>

在这里插入图片描述

绑定表达式

  • 数据绑定表达式使用XAML标记扩展。因为正在创建System.Windows.Data.Binding类的一个实例,所以绑定表达式以单词Binding开头。至少需要设置两个属性:ElementName属性(指示源元素)和Path属性(指示源元素中的属性)。
  • 如果希望引用附加属性(在另一个类中定义但应用于绑定元素的属性),需要再圆括号中封装属性名称。如,绑定到Grid控件中的某个元素,路径(Grid.Row)将检索放置元素的行号。

绑定错误

WPF不会引发异常来通知与数据绑定相关的问题。如果指定元素或属性不存在,那么不会收到任何指示;

绑定模式

数据绑定的一个特性是目标会被自动更新,而不考虑源的修改方式。

BindingMode枚举值

名称说明
OneWay当源属性变化时更新目标属性
TwoWay当源属性变化时更新目标属性,并且当目标属性变化时更新源属性
OneTime最初根据源属性值设置目标属性。
OneWayToSource与OnWay类型类似,但方向相反。当目标属性变化时更新源属性。
Default此类绑定依赖于目标属性。既可以是双向的,也可以是单向的。除非明确指定了另一种模式,否则所有绑定都使用该方法

在这里插入图片描述

示例,双向绑定模式:

<StackPanel><Slider x:Name="sliderFontSize" Margin="3" Width="500" Minimum="1" Maximum="40" Value="10"TickFrequency="1" TickPlacement="TopLeft"></Slider><TextBlock x:Name="textBlock" Margin="10" Text="简单文本内容"FontSize="{Binding ElementName=sliderFontSize, Path=Value, Mode=TwoWay}"></TextBlock><Button x:Name="smallBtn" Margin="10" Width="100" Click="smallBtn_Click">小字体</Button><Button x:Name="largeBtn" Margin="10" Width="100" Click="largeBtn_Click">大字体</Button>
</StackPanel>
private void smallBtn_Click(object sender, RoutedEventArgs e)
{textBlock.FontSize = 15;
}private void largeBtn_Click(object sender, RoutedEventArgs e)
{textBlock.FontSize = 30;
}

在这里插入图片描述

代码创建绑定

在构建窗口时,在XAML标记中使用Binding标记扩展来声明绑定表达式通常最高效。但也可以使用代码来创建绑定:

示例,代码创建绑定:

Binding binding = new Binding();
binding.Source = sliderFontSize;
binding.Path = new PropertyPath("Value");
binding.Mode = BindingMode.TwoWay;
blockText.SetBinding(TextBlock.FontSize, binding);

移除绑定

可以通过代码使用BindingOperation类的两个静态方法移除绑定。

  • ClearBinding()方法:使用依赖项属性的引用作为参数,删除指定的数据绑定;
  • ClearAllBinding()方法:为元素删除所有数据绑定;

BindingOperation.ClearAllBinding(blockText);

需要使用代码绑定的一些特殊情况:

  • 创建动态绑定
  • 删除绑定

使用代码检索绑定

可使用代码检索绑定并检查其属性,而不必考虑绑定最初是用代码还是标记创建的。
获取绑定信息的两种方式:

  1. 使用静态方法BindingOperations.GetBinding()来检索相应的Binding对象。需要提供两个参数:绑定元素以及具有绑定表达式的属性。
<TextBlock x:Name="textBlock" Margin="10" Text="简单文本内容"FontSize="{Binding ElementName=sliderFontSize, Path=Value"></TextBlock>
Binding binding = BindingOperations.GetBinding(textBlock, TextBlock.FontSize);

一旦获取到绑定对象,就可以检查其属性。如:

  • Binding.ElementName:绑定元素名;
  • Binding.Path:绑定值;
  • BindingMode:绑定模式;
  1. 通过调用BindingOperations.GetBindingExpression()方法获得更实用的BindingExpression对象:
    BindingExpression expression = BindingOperations.GetBingdingExpression(textBlock, TextBlock.FontSize);
	// 获取源元素Slider boundObj = (Slider)expression.ResolvedSource;string boundData = boundObj.FontSize;

多绑定

可以绑定元素的多个属性。

示例:绑定了 TextBlock元素的 FontSize,Text 和 Foreground三个属性

<StackPanel Width="500"><Slider x:Name="sliderFontSize" Minimum="10" Maximum="40" Value="20"></Slider><TextBox x:Name="textInput">请输入内容</TextBox><ListBox x:Name="listboxColor" SelectedIndex="0"><ListBoxItem Foreground="Red">Red</ListBoxItem><ListBoxItem Foreground="Green">Green</ListBoxItem><ListBoxItem Foreground="Blue">Blue</ListBoxItem></ListBox><TextBlock x:Name="textShow" Margin="5"FontSize="{Binding ElementName=sliderFontSize, Path=Value}"Text="{Binding ElementName=textInput, Path=Text}"Foreground="{Binding ElementName=listboxColor, Path=SelectedItem.Foreground}"></TextBlock>
</StackPanel>

在这里插入图片描述

绑定更新

绑定数据的更新行为由Binding.UpdateSourceTrigger属性控制,枚举值有:

名称说明
PropertyChanged当目标属性发生变化时立即更新源
LostFocus当目标属性发生变化并且目标丢失焦点时更新源
Explicit除非调用BindingExpression.UpdateSource()方法,否则无法更新源
Default更加目标属性的元素数据确定更新行为

例如,添加了UpdateSourceTrigger=PropertyChanged

<TextBlock x:Name="textFontSize"Text="{Binding ElementName=textInput, Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBlock>

绑定延时

下极少数情况下,需要防止数据绑定触发操作和修改源对象,至少需要延迟一段时间。这种情况可以使用Binding对象的Delay属性。等待数毫秒,之后再提交更改。

例如:添加了Delay=500

<TextBlock x:Name="textFontSize"Text="{Binding ElementName=textInput, Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged,Delay=500}"></TextBlock>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle19c安装-aarch64

建议 参考oracle官方文档提供的软硬件要求 https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/operating-system-checklist-for-oracle-database-installation-on-linux.html#GUID-E5C0A90E-7750-45D9-A8BC-C7319ED934F0 建议使用OracleLinux8.6及以上操作…

数据结构:非比较排序

非比较排序都具有很大的局限性,包括技术排序,基数排序,桶排序等 计数排序 时间复杂度:O(N) 空间复杂度:O(range) 适用范围 数据的范围集中的数组进行排序,不适合数据分散的数组 方法 统计每个数据出现的次数为n 建立一个相同大小的数组,将每个数据都初始化为0 然后遍历…

niushop单商户V5多店版源码分享三端uniapp打包方法包括PC端_小程序或h5端打包_收银端打包_APP端打包_商户端

目前多店版有四端uniapp&#xff0c;包括PC端uniapp&#xff0c;商家端uniapp&#xff0c;收银端uniapp&#xff0c;门店手机端uniapp&#xff0c;下面我总结下这些端的打包流程希望能帮助到大家&#xff0c;需要交流的可以看我昵称或者点我头像关注我分享代码和教程 一.niush…

【微众银行笔试题汇总】 2024-03-31-微众银行春招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是KK爱Coding &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新微众银行近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&…

Java面试必问题24:线程池的拒绝策略有哪些 synchronized 和 lock 的区别 (重点)

以上列出的是Java线程池中常见的拒绝策略&#xff0c;具体可以根据实际情况选择合适的拒绝策略&#xff0c;也可以自定义实现RejectedExecutionHandler接口来定义自己的拒绝策略。默认的拒绝策略是AbortPolicy&#xff0c;即直接抛出异常。 最简回答&#xff1a;线程池的拒绝策…

YOLOv9改进策略:主干系列 | Transformer架构ConvNeXt 网络在检测中大放异彩

💡💡💡本文改进内容:Transformer架构 ConvNeXt 网络在图像分类和识别、分割领域大放异彩,同时对比 Swin-T 模型,在多种任务中其模型的大小和准确率均有一些提升,模型的 FLOPs 较大的减小且 Acc 有部分提高。 💡💡💡将此Transformer ConvNeXt 网络引入到YOLOv9…

【prometheus】k8s集群部署Grafana安装并接入Promethues数据源

目录 一、概述 1.1 优点 1.2 特点 二、grafana部署 三、grafana接入Promethues数据源 四、grafana可视化展示物理节点指标数据 五、grafana可视化展示k8s组件指标数据 5.1 kube-state-metrics简介 5.2 安装kube-state-metrics组件 一、概述 Grafana是一款用Go语言开发…

软考 - 系统架构设计师 - 数据流图案例题

阅读以下关于系统数据分析与建模的叙述&#xff0c;在答题纸上回答问题1至问题3。 【说明】 某公司正在研发一套新的库存管理系统。系统中一个关键事件是接收供应商供货。项目组系统分析员小王花了大量时间在仓库观察了整个事件的处理过程&#xff0c;并开发出该过程所执行活动…

vue 响应式原理 Object.defineProperty(obj,‘属性名A‘,options);

目录 self简单讲解1. 视图影响数据2. 数据影响视图3. 视图数据双向影响页面展示 百度 self 简单讲解 get和set方法是ES5中提供的&#xff0c;因为是方法&#xff0c;所以可以进行判断&#xff0c;get 一般是要通过 return 返回的&#xff1b;而 set 是设置&#xff0c;不用返回…

GT收发器第六篇_GT channel内部时钟关系

文章目录 一、TX端时钟二、RX端时钟 一、TX端时钟 TX端可分为4个区域&#xff0c;分别为FPGA TX接口、PCS靠FPGA侧、PCS靠PMA侧、PMA&#xff0c;如下图。GTX/GTH发射器包括TXBUFFER和TX相位校准电路&#xff0c;以解决时钟域之间的相位差。TX相位校准电路用于TXBUFFER被旁路时…

书生·浦语大模型开源体系(二)笔记

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

【tensorflow框架神经网络实现鸢尾花分类_Keras】

文章目录 1、前言2、鸢尾花分类3、结果打印 1、前言 【tensorflow框架神经网络实现鸢尾花分类】一文中使用自定义的方式&#xff0c;实现了鸢尾花数据集的分类工作。在这里使用tensorflow中的keras模块快速、极简实现鸢尾花分类任务。 2、鸢尾花分类 import tensorflow as t…

营销日历丨2024年4月营销日历火热出炉!四月热点抢先看

4月1日 愚人节 愚人节是一个充满欢乐和恶搞的节日&#xff0c;品牌可以巧妙地利用这个节点来开展一些有趣的营销活动。在这个特殊的日子里&#xff0c;品牌可以走“愚人”的恶搞路线&#xff0c;但需要注意的是&#xff0c;营销活动要把握好尺度&#xff0c;避免过度恶搞&#…

STM32F103通过labview上位机上传温湿度数据到OneNET物联网平台

资料下载地址&#xff1a;STM32F103通过labview上位机上传温湿度数据到OneNET物联网平台 本实验通过两个STM32单片机设备分别测量室内外的温湿度&#xff0c;并把数据发送到上位机上传到ONENET物联网平台。 大体数据传输流程如下&#xff1a; 首先是注册OneNET平台账号&#…

Docker Desktop 在 Windows 上的安装和使用

目录 1、安装 Docker Desktop 2、使用 Docker Desktop &#xff08;1&#xff09;运行容器 &#xff08;2&#xff09;查看容器信息 &#xff08;3&#xff09;数据挂载 Docker Desktop是Docker的官方桌面版&#xff0c;专为Mac和Windows用户设计&#xff0c;提供了一个简…

Axure RP 9下载教程,产品经理实战指南!

Axure rp 9是产品经理必备的专业快速原型设计工具。Axure rp 9可快速高效地创建产品原型图&#xff0c;绘制APP和网页原型图、框架图、结构图等。但是Axuree rp 9下载在用户体验中的缺陷也相对明显&#xff0c;其设置交互方式相对繁琐&#xff0c;可视化不足、条件判断、变量、…

泰克Tektronix MDO3054混合域示波器

181/2461/8938产品概述&#xff1a; Tektronix MDO3054 示波器&#xff0c;混合域&#xff0c;500 MHz&#xff0c;4 通道&#xff0c;5 GS/s 泰克 MDO3054 混合域示波器是终极 6 合 1 集成示波器&#xff0c;包括可选的集成频谱分析仪、任意函数发生器、逻辑分析仪、协议分析…

KNN算法 | K邻近:基础概念

目录 一. KNN算法原理二. KNN算法三要素1. K值的选择2. 距离2.1 欧氏距离2.2 曼哈顿距离(城市街区距离)2.3 切比雪夫距离(棋盘距离)2.4 闵可夫斯基距离2.5 标准化欧式距离2.6 余弦距离欧氏距离与余弦距离对比 3. 决策规则3.1 KNN分类任务多数表决法加权多数表决法 3.2 KNN回归任…

26番外1 对PE启动U盘的思考:制作启动盘,真的不用格式化!!!

番外1 对PE启动U盘的思考 我们在使用官方软件工具(如微PE工具箱)制作任何一个启动U盘的时候,他们总会提示我们:U盘需要格式化!!请备份好自己的数据!! 我一直在思考:为什么一定要格式化呢?需要格式化吗? 为了解决这个问题,我开始思考启动盘的本质. 启动盘的本质是什么?它怎么…

Android 自定义View 测量控件宽高、自定义viewgroup测量

1、View生命周期以及View层级 1.1、View生命周期 View的主要生命周期如下所示&#xff0c; 包括创建、测量&#xff08;onMeasure&#xff09;、布局&#xff08;onLayout&#xff09;、绘制&#xff08;onDraw&#xff09;以及销毁等流程。 自定义View主要涉及到onMeasure、…