WPF编程宝典 - 09命令
理解命令
所谓的命令——并将控件连接到命令,从而不需要重复编写事件处理代码。更重要的是,当连接的命令不可用时,命令特性通过自动禁用控件来管理用户界面的状态。命令模型还为存储和本地化命令的文本标题提供了一个中心场所。
将事件映射到命令
虽然WPF命令系统是一款简化应用程序设计的优秀工具,但仍有一些很重要的问题没有解决。特别是,WPF 对以下方面没有提供任何支持:
命令跟踪(例如,保留最近命令的历史)
“可撤销的”命令
具有状态并可处于不同“模式”的命令(例如,可被打开或关闭的命令)
命令模型
WPF命令模型由许多可变的部分组成。总之,它们具有如下4个重要元素:
命令:命令表示应用程序任务,并且跟踪任务是否能够被执行,然而,命令实际上不包含执行应用程序任务的代码。
命令绑定:每个命令绑定针对用户界面的具体区域,将命令连接到相关的应用程序逻辑。这种分解的设计是非常重要的,因为单个命令可用于应用程序中的多个地方,并且在每个地方具有不同的意义。为处理这一问题,需要将同一命令与不同的命令绑定。
命令源:命令源触发命令。例如,MenuItem和Button都是命令元。单击它们都会 ...
WPF编程宝典 - 08元素绑定
将元素绑定到一起
数据绑定的最简单情形是,源对象是WPF元素而且源属性是依赖属性。
绑定表达式
数据绑定表达式使用XMAL标记扩展(因此具有花括号)。因为正在创建System.Windows.DataBinding类的一个实例,所以绑定表达式以单词Binding开头。尽管可采用多种方式破诶只Binding对象,但本示例只需要设置两个属性:ElementName属性(指示源元素)和Path属性(指示源元素中的属性)
1234<StackPanel> <Slider x:Name="silder" Minimum="10" Maximum="100"/> <TextBlock FontSize="{Binding ElementName=silder,Path=Value}" Text="Simple Text"/></StackPanel>
之所以使用名称Path而不是Property,是因为Path ...
01概述
简述
MQTT(Message Queuing Telemetry Transport)消息队列遥测传输协议是一种轻量级的发布/订阅消息传输协议,特别适用于需要远程监控的物联网(IoT)设备和小型传感器。这种协议的设计目标是实现低带宽和高延迟的网络环境中的可靠通信。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的。MQTT被广泛用于物联网领域,包括但不限于以下场景:
智能家居:连接各种家用设备,如灯光、温控器和安全系统
工业自动化:监控和控制工业设备和传感器
远程监控:实时监控远程设备和环境参数,如农业监控和环境监测
MQTT协议由于其轻量级和高效性,成为物联网设备通信的理想选择。其发布/订阅模式和多种消息传递保证机制,使得它能够在不同的网络环境中可靠地传输数据。
设计规范
由于物联网的环境是非常特别的,所以MQTT遵循以下设计原则:
精简,只保留必要功能,避免冗余,确保协议轻量级和高效运行
发布/订阅(Pub/Sub)模式,采用发布/订阅(Pub/Sub)模式,简化传感器和设备之间的消息传递,提高系统扩展性和 ...
清除Widnows更新缓存文件
通过[命令提示符]删除Windows更新缓存文件
使用Windows + R快捷键打开[运行]对话框,输入cmd,然后按Ctrl + Shift + Enter以管理员权限打开[命令提示符]
执行以下命令停止[Windows Update]服务
1net stop wuauserv
执行以下命令进入到SoftwareDistribution目录
1cd %Windir%\SoftwareDistribution
执行以下命令,强制删除Download文件夹及其子文件夹中的所有文件
1del /f /s /q Download
执行以下命令,强制删除DataStore文件夹及其子文件夹中的所有文件
1del /f /s /q DataStore
执行以下命令重新启动[Windows Update]服务
1net start wuauserv
WPF编程宝典 - 07Application类
应用程序的生命周期
在 WPF 中,应用程序会经历简单的生命周期。在应用程序启动后,将立即创建应用程序对象。在应用程序运行时触发各种应用程序事件,您可以选择监视其中的某些事件。最后,当释放应用程序对象时,应用程序将结束。
创建Application对象
手动创建Application对象启动Wpf应用
设置项目属性的EnableDefaultApplicationDefinition属性为false使WPF应用不自动生成Main函数
123456<PropertyGroup> ... <!-- +++ --> <EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition> <!-- +++ --></PropertyGroup>
新建自己的文件
12345678910class Program{ [STAThread] public static void ...
WPF编程宝典 - 06控件
控件类
所有控件都继承自System.Windows.Control类,该类添加了一小部分基本的基础结构:
设置控件内容对其方式的能力
设置Tab键顺序的能力
支持绘制背景、前景和边框
支持格式化文本内容的尺寸和字体
Brush
WPF设置前景色和背景色不是采用简单的颜色值,而是采用更强大的Brush对象,WPF提供了三种画刷:
SolidColorBrush(实心画刷) 12345<Grid> <Grid.Background> <SolidColorBrush Color="LightGreen"/> </Grid.Background></Grid>
LinearGradientBrush(线性渐变画刷) 1234567891011<Grid> <Grid.Background> <!-- 起点(0,0) 终点(1,1) 表示渐变方向为左上角 → 右下角 --> <!-- Offs ...
WPF编程宝典 - 05路由事件
路由事件
路由事件时具有更强传播能力的事件——它们可在元素树中向上冒泡和向下隧道传播,并且沿着传播路径被事件处理程序处理。路由事件允许事件在某个元素上被处理(如标签),即使该事件源自另一个元素(如标签内部的一幅图像)也是如此。与依赖项属性一样,可通过传统的方式使用路由事件——通过关联具有正确签名的事件处理程序——但为了使用路由事件的所有功能,需要理解其工作原理。
理解路由事件
每个.NET开发人员都熟悉“事件”的思想–当有意义的事情发生时,由对象(如WPF元素)发送的用于通知代码的消息。WPF通过事件路由(event routing)的概念增强了.NET事件模型。事件路由允许源自某个元素的事件由另一个元素引发。例如,使用事件路由,来自工具栏按钮的单击事件可在被代码处理之前上传到工具栏,然后上传到包含工具栏的窗口。
定义/注册和封装路由事件
WPF事件模型和WPF属性模型非常类似。与依赖项属性一样,路由事件由只读的静态字段表示,在静态构造函数中注册,并通过标准的.NET事件定义进行封装。
例如,WPF 的Button类提供了大家熟悉的Click事件,该事件继承自抽象的Butt ...
git通过ssh连接github
Git简介
Git是一个分布式版本控制系统,用于跟踪文件的变化并协调多个人在同一个项目上的工作。它最初由Linus Torvalds创建,用于管理Linux内核开发,现已成为许多软件开发团队和项目的标准工具之一。
git版本管理流程
SSH简介
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上安全地进行远程登录和执行命令。它提供了加密的通信机制,可以确保在客户端和服务器之间传输的数据是安全的,不会被窃听或篡改。
SSH的主要特点包括:
加密通信:SSH使用加密算法对通信数据进行加密,防止数据被第三方窃听或篡改。
认证机制:SSH支持多种认证方式,包括基于密码的认证、基于公钥的认证以及基于身份证书的认证,以确保用户身份的安全性。
安全性:SSH设计时考虑了各种安全问题,包括密码猜测、中间人攻击等,并提供了相应的安全机制和措施来保护系统免受这些攻击。
远程访问:SSH允许用户通过网络远程登录到其他计算机,并在远程计算机上执行命令或访问文件。
文件传输:除了远程登录,SSH还支持安全地传输文件,通过SCP(Secure Copy Protocol)或SFT ...
WPF编程宝典 - 04依赖属性
依赖项属性
依赖项属性是标准.NET属性的全新实现–具有大量新增价值。在 WPF的核心特性(如动画、数据绑定以及样式)中需要嵌入依赖项属性。WPF 元素提供的大多数属性都是依赖项属性。依赖项属性的用法和普通属性是相同的。
只能为依赖对象(继承自DependencyObject的类)添加依赖属性。幸运的是,WPF基础结构的关键部分中的大部分都简介继承自DependencyObject类,最明显的例子就是元素
定义依赖项属性
第一步是定义表示属性的对象,它是DependencyProperty类的实例。属性信息应该始终保持可用,甚至可能需要在多个类之间共享这些信息。因此,必须将DependencyProperty对象定义为与其相关联的类的静态字段。
1234public class FrameworkElement : UIElement{ public static readonly DependencyProperty MarginProperty;}
根据约定,定义依赖属性项属性的字段的每次是在普通属性的末尾处加上单词“Property”。根据这种 ...