WPF
文章平均质量分 63
BoBPage
这个作者很懒,什么都没留下…
展开
-
WPF依赖属性-DependencyProperty和INotifyPropertyChanged区别
WPF数据绑定的资源,可以是CRL对象;可以绑定CLR对象的属性,属性或索引器;绑定数据的解释是通过Microsoft . net Framework反射或ICustomTypeDescriptor解释;解释绑定的方法有三种,其中最常的是成为依赖对象派生类实现INotifyPropertyChanged 这两种方法的区别在于: CLR通常采用实现INotifyPropertyChanged达到绑定的目标;继承至依赖对象的对象,则通过定义依赖属性实现绑定。这两者的区别在于:针对的对象不同,一个原创 2021-08-10 19:59:33 · 644 阅读 · 0 评论 -
Visual studio 自定义代码段
Visual studio 代码段就是代码模板,Visual Studio 内置了一些常用的代码段,如:键入prop,再按两次tab键,会生成自动属性代码。public int MyProperty { get; set; }键入propdp,再按两次tab键,会生成依赖属性代码。 代码模板是存放在Visual Studio安装目录,指定目录下的代码生成模板;只要我们按照规则编写模板文件;并把文件存放在指定目录下;然后通过代码段管理,指定快捷键即可;1)代码段管理 通过菜单【工具】-【代码段原创 2021-07-07 09:42:00 · 597 阅读 · 0 评论 -
颜色选择器开发-色域及转换算法
一、颜色编码方式(颜色空间/色域):1、RGBRGB三原色是基于人肉眼对光线的生理作用2、HSB/HSVHSB(也叫HSV)模式更便于描述人眼对颜色的感觉;色调(Hue,H),饱和度(Saturation,S),亮度(Value,V)3、CMYKCMYK也称作印刷色彩模式,顾名思义就是用来印刷的,是一种用于印刷品依靠反光的色彩模式。CMYK——即青Cyan、洋红(品红)Magenta、黄Yellow 、黑blacK四种色彩,在印刷中通常可由这四种色彩再现其它成千上万种色彩青、品红、黄原创 2021-06-15 13:40:58 · 1175 阅读 · 0 评论 -
深入理解WPF附加事件
通过前一篇 https://blog.csdn.net/BitoLink/article/details/117330733,了解路由事件的声明、定义、注册/注销,以及触发机制; 其中事件的注册/注册,以及触发方法都是定义在UIElement中的;所以路由事件的宿主一般是可视化的UI控件。 如果是非UIElement派生类,如果要实现路由事件,则需要像附加属性一样,通过附加的方式实现,附加上路由事件 (Attached Event);附加属性是某对象在特定环境中才具备的属性,所以附加属性是定义在环境中的原创 2021-06-02 14:00:59 · 406 阅读 · 0 评论 -
深入理解WPF路由事件
WPF中有两种事件模型:一种是在WinForm时代就存在的CLR事件;另一种是WPF时代的路由事件;一、CLR事件定义与使用 //定义一个委托 public delegate void ClickHandler(String Name); public class Test { /// 定义事件 public event ClickHandler ClickEvent; /// <summary>原创 2021-05-27 16:01:26 · 997 阅读 · 0 评论 -
关于.Net MAUI
MAUI(Multi-platform App UI)是微软在Build 2020 大会上,正式公布的.NET上的跨平台框架,正式版将在2021年11月发布的 .NET 6 中发布一、MAUI关键信息MAUI 是 Xamarin.Forms 的进化MAUI 使用同的技术栈,一个项目,可发布至:Android,iOS,macOS 和 Windows平台MAUI 项目中,不同的平台,通过添加特定操作系统的源代码文件,访问本机底层操作系统 API 跨平台的关键:特定操作系统的源代码文件;这部分原创 2021-05-26 10:50:34 · 1556 阅读 · 0 评论 -
WPF设备无关单位(DIU)
1、关于WPF 单位 WPF 为了保持应用程序窗口,在不同分辨率的显示器上,始终保持基本相同的布局;WPF所有元素都是使用与设备无关的单位(DIU)进行度量。由于UI设计师的显示器和开发人员的显示器的分辨率不经常是一致的,并且UI设计师,通常采用的是用“像素”来度量尺寸;所以需要进行转换;2、关于分辨率的几个概念在了解转换方法前,首先应了解几个基本概念1)物理显示器DPI 根据显示器的分辨率计算2)系统DPI设置 Windows10,可以在显示设置中进行缩放设置;进行缩放设置后,系统DPI设原创 2021-05-25 17:14:40 · 386 阅读 · 0 评论 -
WPF使用第三方的字体(TTF文件)
一、下载字体找到需要的字体文件,可以是TTF或TTC格式,我这里使用的是TTC格式测试字体:链接:https://pan.baidu.com/s/1P1BCucH2gd_fldcZTgZaNA提取码:vx2v下载完后,会得到一个TTC文件二、查看字体中的字体类型双击,打开TTC文件;其中的字体名称,就是FontFamily三、添加字体文件为资源文件添加程序集资源中添加该文件来资源文件添加完成后,该文件就存在于Resource目录下四、使用资源文件五、在App.xaml中或者原创 2021-05-18 19:42:12 · 3016 阅读 · 0 评论 -
WPF从外部文件或者程序集加载样式或其他静态资源
很多时候我们希望复用WPF中的样式,而通过复制一长串样式代码至XAML中的静态资源显得极为不雅,导致代码不易于管理。而想要改变这种模式有两种方式:(1)新增“资源字典”项目,将样式代码写入该文件中,使用时只需引用该文件即可;(2)将上述的“资源字典”放到一个类库项目中,生成程序集,其他项目想要使用时需引用该程序集,然后添加对应的样式文件路径即可。方法1:在生成exe的程序中,需要设定关键词(Key),控件引用时加 Resources属性方法2:<Window.Resources&g转载 2021-05-17 14:24:48 · 512 阅读 · 0 评论 -
WPF 自定义控件
参考以下系列教程 《WPF自定义控件与样式》原创 2021-05-14 11:07:51 · 168 阅读 · 0 评论 -
WPF实现换肤(手动)
一、三个基础知识1、分层式资源 Hierarchical ResourceFrameworkElement基类有一个Resources属性,类型是ResourceDictionary。这个字典包含了一组键值对,每个键值对中的key和value都可以使任意的object。Resource dictionaries 在程序中分层存放。当程序需要定位一个资源(例如Brush, Style,DataTemplate或其他对象)的时候,首先他检查发起资源寻找请求的元素的Resource属性。假如没有找到,它会检原创 2021-05-11 17:03:07 · 407 阅读 · 0 评论 -
WPF依赖属性-附加属性
&emdp;WPF附加属性:在特定环境下,对象才具备(有意义)的属性;例如:一个人所在的公司,只有在讨论他工作时候,才有意思;GIRD控件中子控件的Row,Column属性; 因为附加属性是在特定的环境下才有意义,那么附加属性是定义在环境中的; 附加属性的定义:改造前一篇《依赖属性的传递》的代码 public class CustomStackPanel : StackPanel { public static readonly DependencyPro原创 2021-05-10 15:57:40 · 814 阅读 · 0 评论 -
WPF依赖属性-依赖属性的传递(继承)
依赖属性的传递,在XAML逻辑树上, 内部的XAML元素,关联了外围XAML元素同名依赖属性值 ;<Window x:Class="Custom_DPInherited.DPInherited" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http原创 2021-05-10 14:48:42 · 716 阅读 · 0 评论 -
WPF依赖属性-依赖属性介绍
WPF的设计理念是:数据驱动,UI与逻辑松耦合一、什么是依赖属性 依赖属性是一种可以自已没有值,但是可以通过Binding方式,从数据源(依赖别人的数据)获得值的属性二、为什么要有依赖属性传统的CLR属性public class Person{ private string _Name; public string Name { get { return _Name; } set原创 2021-05-10 14:04:31 · 278 阅读 · 0 评论 -
【转载】透视WPF 应用程序的利器
源文链接《透视WPF 应用程序的利器》当我们看到一些设计新颖的网站时,可以借助浏览器自带的Inspector 工具或插件方便的浏览网站布局结构及逻辑。如果是WPF 应用程序能否看到控件的架构方式呢?本篇将介绍两款工具Snoop 和WPF Inspector 可用来窥探WPF 应用程序内部结构。Snoop 打开Snoop 程序,它是以一个工具栏形式出现(如下图)。 接下来打开一个经典WPF 应用程序Expression Blend 4(下文简称:EB4),点击“刷新”按键即可看到Snoop 已经捕获转载 2021-05-08 11:41:32 · 192 阅读 · 0 评论 -
MvvmLight(5)-使用MvvmLight实现Mvvm设计模式
前面几个章节,主要介绍了,在不引用MvvmLight框架的情况下,利用WPF自身的特性;如何实现界面与数据,以及业务逻辑的解耦;解耦后,我们将代码整理到不同的程序集,便于管理;最终整理结果如下: 为了更方便地使用Mvvm设计模式,我们引用MvvmLight框架; 如何安装框架,参见《MvvmLight(1) 介绍》MvvmLight中的Obserable 类实现了INotifyPropertyChanged接口ViewModelBase类,继承了Obserable ,并提供了依赖注入方法原创 2021-04-16 09:48:53 · 574 阅读 · 0 评论 -
MvvmLight(4)-统一管理业务逻辑
在前一章节《MvvmLight(3)-利用Binding解耦界面与业务及数据》中,我们解耦了界面与业务逻辑及数据,这样每个界面都有独立的一个CS文件与之对应,只是这个CS文件再也不是Behinde模式; 这里还有一个比较麻烦的事,每个XAML还是必须与对应的CS文件中的类绑定;如果我们把这些CS文件放在独立的程序集中,那么每个CS中的类,都是对外暴露的;如何统一管理这些类,并对外暴露呢? 解决方案是:由一个统一的类来管理每个页面的类,统一对外暴露;具体操作如下:由一个类(ViewModelLoca原创 2021-04-15 12:08:37 · 135 阅读 · 0 评论 -
MvvmLight(3)-利用Binding解耦界面与业务及数据
在上节介绍 WPF中的数据绑定方式 时,我知道 ,建立数据绑定时,需要作如下处理:待绑定数据类实现INotifyPropertyChange;需暴露给外界的属性发改变时,触发PropertyChanged事件,事件的参数为属性的名称;将数据类作为数据源绑定到界面上;在XAML中通过Path 指定绑定的属性。在这些操作中将数据类作为数据源绑定到界面上时,是通过给DataContext赋值的方式绑定的。DataContext属性是被定义在FrameworkElement类里的,这个原创 2021-04-15 10:55:41 · 226 阅读 · 0 评论 -
MvvmLight(2)-WPF中数据绑定(Data Binding)
WPF 作为展示层技术,华丽的外观和动画,只是它的表层现象;更重要的是,它帮助程序员把思维的重心放在了逻辑层;让展示层永远处于逻辑层的从属地位;由UI驱动,改为数据驱动;其具备这种能力的关键是引入了数据绑定(Data Binding)、依赖属性(Dependency Property)、数据模板(Data Template);层示层使用WPF类库来实现,所有与业务逻辑和算法相关处理都在逻辑层实现;而层示层与逻辑层的沟通是通过数据绑定(Data Binding)来实现;实现了展示层与逻辑层的解耦,方便开发与原创 2021-04-09 14:39:28 · 316 阅读 · 0 评论 -
MvvmLight(1) 介绍
为什么要用MvvmLightMVVM是Model-View-ViewModel的简写。主要目的是为了分离视图(View)和模型(Model)的耦合想进一步了解MVVM,移步:https://www.codeproject.com/kb/wpf/wpfmvvmquickstart.aspx,使用了MvvmLight后,业务代码不再是写在XAML对应的CS文件中,而是有专门类(模块)处理业务逻辑和数据访问;完全解耦了视图和逻辑业务的关系,通过数据绑定和命令来处理UI属性及事件驱动MVVMLight的官原创 2021-04-09 09:41:32 · 189 阅读 · 0 评论 -
AvalonDock使用(2)-简单布局设置
在上一篇《AvalonDock的基本用法》中,我们使用AvalonDock控件,简单实现了,停靠左右两边的面板;这是面板的默认停靠位置;当然你也可以拖动它,让浮动,也可以让它停靠在其它地方;通过简单几行代码实现了如下效果:隐藏所有面板:两个都隐藏时,会分别折叠到两边;展开其中一个面板:根据我们设定的宽度展开;展开所有面板:同时展开时,会各占据50%的空间同Visual Studio 对比,似乎还少了中间一部分,即占据中间部分的区域;在上一篇中,我们讲到LayoutDoucument会随着La原创 2021-04-08 15:57:27 · 878 阅读 · 0 评论 -
AvalonDock使用(1)-基本用法
AvalonDock的基本用法介绍AvalonDock库中的基本类DockingManager:停靠管理器类LayoutRoot : 布局根节点类LayoutPanel:布局面板类LayoutAnchorablePane:可停靠窗格类LayoutAnchorable:可停靠内容类LayoutDocumentPane:文档窗格类LayoutDocument:文档类LayoutAnchorablePaneGroup:可停靠窗格组类LayoutDocumentPaneGroup:文档窗格组类小结具体的用法1. 通原创 2021-04-08 15:12:16 · 3810 阅读 · 0 评论