WPF XAML

<Window x:Class="DManager.View.LedgerView"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Height="700"

Title="Window1">

<Grid>

</Grid>

</Window>

对于这段xaml代码

为了给同类标签中某个标签与众不同 可以给他的特征attribute赋值

非空标签 <Tag Attribute1=Value1 Attribute2=Value2>Content</Tag>

空标签 <Tag Attribute1=Value1 Attribute2=Value2 />

区分property 和 attribute

property属于面向对象,在使用面向对象思想编程时 需要对客观事物进行抽象 在把抽象出来的结果封装成类 类中用来表示事物状态的成员就是property

总结就是property(属性)时针对对象而言的 时对象的外在表现

attribute(特征)

xaml是用来在ui上控制组件的 而控件本身就是面向对象抽象的产物

xaml是一种声明式语言 当你见到一个标签 就意味着声明了一个对象

x:Class="DManager.View.LedgerView"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Height="700"

Title="Window1">

这些全是window标签的attribute

使用partial关键字,可以把一个类分拆在多处定义,只要各部分代码不冲突即可。显然,由XAML解析器生成的LedgerView类在声明时也使用了partial关键字,这样由XAML解析成的类和C#文件里定义的部分就合二为一了。正是由于这种partial机制,我们可以把类的逻辑代码留在.cs文件里,用C#语言来实现,而把那些与声明及布局UI元素相关的代码分离出去,实现UI与逻辑分离。并且,用于绘制UI的代码(如声明控件类型的字段、设置它们的外观和布局等)也不必再使用C#语言,使用XAML和XAML编辑工具就能轻松搞定。

XAML是一种声明性语言,XAML编译器会为每个标签创建一个与之对应的对象

XAML中为对象赋值共有两种方法:

  • 使用字符串进行简单赋值
  • 使用属性元素(Property Element)进行复杂赋值

TypeConverter和TypeConverterAttribute这两个类

从TypeConverter类派生出自己的类,并重写它的一个ConvertFrom方法。这个方法有一个参数名为value,这个值就是在XAML文档里为它设置的值,我们要做的就是把这个值"翻译"成合适类型的值赋给对象的属性:

复制代码
public class StringToHumanTypeConverter : TypeConverter
{
	public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
	{
		if (value is string)
		{
			Human h = new Human();
			h.Name = value as string;
			return h;
		}
		return base.ConvertFrom(context, culture, value);
	}
}

还要使用TypeConverterAttribute这个特征类把StringToHumanTypeConverter这个类"粘贴"到作为目标的Human类上。

复制代码
[TypeConverterAttribute(typeof(StringToHumanTypeConverter))]
public class Human
 {
     public string Name { get; set; }
     public Human Child { get; set; }
 }
相关推荐
小小工匠3 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
Ulyanov6 小时前
基于ttk的现代化Python音视频播放器:UI设计与可视化技术深度解析
python·ui·音视频
UXbot8 小时前
2026年AI全链路产品开发工具对比:5款从创意到上线一站式平台深度解析
前端·ui·kotlin·软件构建·swift·原型模式
ai_coder_ai10 小时前
自动化脚本ui开发基础入门
ui·autojs·自动化脚本·冰狐智能辅助·easyclick
△曉風殘月〆11 小时前
如何在WPF中捕获窗口外的事件
wpf
sg_knight1 天前
设计模式实战:状态模式(State)
python·ui·设计模式·状态模式·state
黄思搏1 天前
基于标注平台数据的 Unity UI 自动化构建工作流设计与工程实践
ui·unity·蓝湖·vectoui
小樱花的樱花2 天前
1 项目概述
开发语言·c++·qt·ui
2301_822703202 天前
开源鸿蒙跨平台Flutter开发:跨端图形渲染引擎的类型边界与命名空间陷阱:以多维雷达图绘制中的 dart:ui 及 StrokeJoin 异常为例
算法·flutter·ui·开源·图形渲染·harmonyos·鸿蒙
爱吃烤鸡翅的酸菜鱼2 天前
Java 事件发布-订阅机制全解析:从原生实现到主流中间件
java·中间件·wpf·事件·发布订阅