高级桌面编程(二)

一、前言

文章的续作前文是:

高级桌面编程(一)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_71897293/article/details/135072204?spm=1001.2014.3001.5502

二、自定义控件

1创建自定义控件,如下图所示:

2 在创建的页面可以自定义其控件外观。

举个例子:

<UserControlx:Class="WpfApp1.UserControl1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:WpfApp1"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Name="User"Width="100"Height="100"mc:Ignorable="d"><UserControl.Resources><!--  在这里添加您需要用到的引用  --></UserControl.Resources><Canvas><RectangleWidth="100"Height="100"RadiusX="12.5"RadiusY="12.5"><Rectangle.Fill><LinearGradientBrush StartPoint="1,-1.68" EndPoint="0,1"><GradientStop Offset="0" Color="#FFBEAF57" /><GradientStop Offset="1" Color="#FFFFFFFF" /></LinearGradientBrush></Rectangle.Fill></Rectangle><ImageCanvas.Left="14"Canvas.Top="5"Width="76"Height="59"Source="{Binding ElementName=User, Path=Imagestr}" /><TextBlockCanvas.Left="50"Canvas.Top="68"HorizontalAlignment="Center"VerticalAlignment="Top"FontSize="20"Text="{Binding ElementName=User, Path=YouName}"TextAlignment="Center"TextWrapping="Wrap" /></Canvas>
</UserControl>

使用方式:

<Windowx:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Title="MainWindow"xmlns:loc="clr-namespace:WpfApp1"Width="643"Height="384"BorderThickness="0"mc:Ignorable="d"><Grid><loc:UserControl1 Imagestr="C:\Users\Administrator\Desktop\image\2 (4).jpg" YouName="龙"/></Grid>
</Window>

注意: 创造依赖属性必须通过 DependencyProperty.Register静态的方法来配置属性。

1 DependencyProperty.Register静态方法介绍

        具有3-5个参数的重载。前面三个参数分别:属性名称、属性的类型、包含属性的类的类型。后面参数。PropertyMetadata类型 它可以提供属性的默认值以及值更新后触发的回调。

举个例子:

 public string YouName{get { return (string)GetValue(YouNameProperty); }set { SetValue(YouNameProperty, value); }}public static readonly DependencyProperty YouNameProperty =DependencyProperty.Register("YouName", typeof(string), typeof(UserControl1),new PropertyMetadata ("",Onel));private static void Onel(DependencyObject d, DependencyPropertyChangedEventArgs e){//值更新触发当前方法}

ValidateValueCallback类型的参数为验证值的回调方法。

举个例子:

   public string YouName{get { return (string)GetValue(YouNameProperty); }set { SetValue(YouNameProperty, value); }}public static readonly DependencyProperty YouNameProperty =DependencyProperty.Register("YouName", typeof(string), typeof(UserControl1),new PropertyMetadata ("",Onel),new ValidateValueCallback(Check));private static bool Check(object value){//判断的业务代码return false; //代表当前值无效}private static void Onel(DependencyObject d, DependencyPropertyChangedEventArgs e){}

提示:并非一定要创建属性来获取依赖属性的值,其实可以通过公共方法来获取依赖属性的值,如公共方法 GetValue 与SetValue 

1 FrameworkPropertyMetadata 介绍

        其中PropertyMetadata的构造函数具有11个重载版本其中:defaultValue 默认值 、PropertyChangedCallback 回调函数 、CoerceValueCallback 强制转换属性值的类型时要调用的回调方法、bool 类型  isAnimationProhibited 指定该属性是否可在动画过程中发生变化、UpdateSouruceTrigger 数据更新的方式。

拓展


矩形控件 怎么绘制圆? 答:属性RadiusX  RadiusY

<RectangleWidth="100"Height="100"RadiusX="12.5"RadiusY="12.5"><Rectangle.Fill><LinearGradientBrush StartPoint="1,-1.68" EndPoint="0,1"><GradientStop Offset="0" Color="#FFBEAF57" /><GradientStop Offset="1" Color="#FFFFFFFF" /></LinearGradientBrush></Rectangle.Fill>
</Rectangle>

Pata控件中的Data是什么意思?

        我们可以用M大写,代表我们当前开始绘制图像的一个位置,路径的一个起点。如果我们使用的是小写M则是基于上一个点的一个偏差点 如m25,0 就是相较上一个点X偏差25 Y没有偏差。其中L当我们使用L大写的时候即是代表我们要绘制一条直线,当我们小写的时候即代表我们当前这个点是相较于上一个点的距离。(相对距离)其中C代表我们要绘制一个不规则曲线,其中最后用Z结尾代表将当前的多边形进行闭合 。(L 字母大写代表绝对位置  小写则是相对上一个点的相对位置)其实大家不理解可以直接在Xaml当中绘画一下就知道了。

举个例子:

 <PathMargin="0,0,35,0"Data="M12,0  L47,0 C18,25 17,81 23,98 35,131 54,144 63,149 L12,149  C3,149 0,143 0,136       L0,12 C0,5 3,0 12,0  z"Fill="#FFFFFFFF"Stretch="Fill"Stroke="{x:Null}"><Path.OpacityMask><LinearGradientBrush StartPoint="0,-0.06" EndPoint="0.957,1.127"><GradientStop Offset="0" Color="#FF000000" /><GradientStop Offset="1" Color="#00FFFFFF" /></LinearGradientBrush></Path.OpacityMask></Path>

触发器 DataTrigger的使用方式? 

        使用触发器 DataTrigger 时,它可以帮助您在某个数据对象的属性发生变化时触发特定的操作或更改元素的状态。

举个例子(XAML中):

 <Style TargetType="Button"><Style.Triggers><DataTrigger Binding="{Binding IsEnabled}" Value="True"><Setter Property="Background" Value="Green" /></DataTrigger></Style.Triggers></Style>

示例解释:

        在上面的示例中,当绑定的属性 IsEnabled 的值为 True 时,触发器将更改连接触发器的元素的背景色为绿色。请注意,触发器还可以与其他触发器(如 EventTrigger)一起使用,以实现更复杂的动态效果。

        本章内容学习结束,其中书中大量提到项目示例。我无法给大家提供全面的示例,只会提出几点新了解的知识点进行记录。其他知识点没提可能是经常使用很熟悉则都没有提。

其中关于自定义控件我之前的文章也有过记录,也许能帮助你拓展了解。

工作日志- - -自定义控件(详解)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_71897293/article/details/134314991?spm=1001.2014.3001.5502

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

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

相关文章

葡萄酒的主要区别只在于葡萄本身吗?

谈到葡萄酒&#xff0c;许多人认为选择最喜欢的葡萄酒只是简单地挑选一种颜色:红色或白色。红色和白色的区别是选择葡萄酒的一个很好的起点&#xff0c;但这仅仅是一个起点。要真正享受葡萄酒的体验&#xff0c;你应该深入了解自己。 如果你已经知道你喜欢白葡萄酒&#xff0c;…

25 redis 中 cluster 集群的工作模式

前言 我们这里首先来看 redis 这边实现比较复杂的 cluster集群模式 整个 cluster集群 中会包含多对 MasterSlave 的组合, 然后这多对 MasterSlave 来分解 16384 个 slot 然后 客户端这边 set, get 的时候, 先根据 key 计算对应存储的 slot, 然后 服务器这边响应 MOVED 目标…

飞速(FS)100G ZR4 光模块80km长距离传输

如今&#xff0c;100G QSFP28光模块已经被广泛部署在100m到40km的范围内。然而&#xff0c;传统的100G QSFP28模块面临一个挑战&#xff0c;因为它们的设计仅限于不超过40km的距离。超出此范围&#xff0c;色散、光衰减等问题就会增加&#xff0c;导致信噪比&#xff08;SNR&am…

【C语言】自定义类型:结构体深入解析(一)

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…

Sharding-Jdbc(5):Sharding-Jdbc通过配置文件形式配置分表

1 项目目录 2 配置maven <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

LeetCode Hot100 51.N皇后

题目&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的…

微机原理与接口技术——中断系统

文章目录 一、中断指令概念1、中断类型码2、中断向量3、中断向量表简述接收到中断指令后操作 二、8086中断指令开中断指令&#xff1a;STI关中断指令&#xff1a;CLI软件中断指令&#xff1a;INT n中断返回指令 IRET 三、微机系统中断分类四、CPU响应可屏蔽与非屏蔽中断的条件响…

34 无聊的小明

数组存放每一次运算后的结果&#xff0c;若有重复则满足小明心意。 #include <iostream> using namespace::std; using std::cout; using std::cin; int pfh(int n) {int sum 0;while(n ! 0){int tn%10;sum sumt*t;n n/10;}return sum; }int wlxm(int n) {int js0;i…

【LeetCode刷题-树】--236.二叉树的最近公共祖先

236.二叉树的最近公共祖先 方法&#xff1a;使用哈希表存储父节点 利用哈希表存储所有节点的父节点&#xff0c;然后就可以利用节点的父节点信息从p节点开始不断向上跳&#xff0c;并记录已经访问过的节点&#xff0c;再从q节点开始不断向上跳&#xff0c;如果碰到已经访问过的…

WebGL开发EDA软件

WebGL是一种用于在Web浏览器中进行高性能图形渲染的JavaScript API&#xff0c;通常用于开发与图形、3D模型渲染相关的Web应用。在EDA&#xff08;Electronic Design Automation&#xff09;软件的开发中&#xff0c;涉及到电子设计和电路仿真等方面&#xff0c;WebGL可以用于创…

使用P3口流水点亮8位LED

#include<reg51.h> //包含单片机寄存器的头文件 /**************************************** 函数功能&#xff1a;延时一段时间 *****************************************/ void delay(void) { unsigned char i,j; for(i0;i<250;i) fo…

ansible远程操作主机功能(1)

自动化运维&#xff08;playbook剧本yaml&#xff09; 是基于Python开发的配置管理和应用部署工具。自动化运维中&#xff0c;现在是异军突起。 Ansible能批量配置&#xff0c;部署&#xff0c;管理上千台主机&#xff0c;类似于Xshell的一键输入的工具&#xff0c;不需要每次…