<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; }
}