WPF赋值语法难点

时间:2023-02-06 13:26:04

  赋值语法

  使用字符串  简单赋值

  使用元素属性 复杂赋值

 

  标签中的Attribute部分与对象的Property对应:

<Rectangle Fill = ""> //Attribute标签赋值,这种方式的Value只能是一个字符串值.
Rectangle.Fill = Value;//Property

  在上面出现了两个问题:

  1) Property 需要适当的转换机制,促使Property与Attribute映射.

  2)格式复式程度有限.

 

  那么怎么来解决这两个问题呢,

  对于第一个问题:使用TupeConverter类的派生类,在派生类中重写TypeConvert的某些方法.

  对于第二个问题:使用属性元素(Property Element).

 

     详解

  1.使用TypeConverter类

c# :
public class Human

{
public string Name{set;get;}
public HumanChild{set;get;}
}

XAML:
<window.Resourse>
<local:Human x:key="human" child="ABC"/>
</window.Resourse>

 

  如果上面赋值成功:从Typeconvert派生出一个类,重写它的一个ConvertFrom的方法,这个方法首先有个参数"Value",

这个值就是在xaml中卫它设置的值,我们要做的就是把这个值"翻译"成合适的值赋值对象的属性.

public class StringToHumanTypeConvert:TypeConverter
{
public override Object ConvertFrom(ITypeDescriptorContext context,System.GlobaliZation.CultureInfo culture,Object value)
{
if(value is stirng)
{
Human h = new Human();
h.Name = value as string;
return h;
}
return base.ConverFrom(context,culture,value);
}
}
//用TypeConverterAttribute特征类把StringToHumanTypeConverter这个类贴到作为目标的Human类上

[TypeConverterAttribute(typeof(StringtoHumanTypeContext))]
public class Human
{
public string Name{set;get;}
public Human Child{get;set;}
}

  TypeConverter类的使用远远不止这个些,为了配合这个方法还需要重载其他几个方法,(详细看TypeConvert文档).