属性

简单属性

前面用到的Width/Height都是简单属性,其赋值一定要放到双引号里

XAML解析器会根据属性的类型执行隐式转换

与C#的区别

SolidBrush.Color = Colors.AliceBlue;

<Button Color = "AliceBlue" />

C#中有的枚举类型可以用(|)运算符组合,在XAML中用(,)分隔

附加属性

附加属性可以用于多个控件,但是在另外一个类中定义的属性,在WPF中常常用于布局

如DockPanel.Dock="Left" 也可以使用下面的形式

<DockPanel.Dock>Left</DockPanel.Dock>

Content属性

有以下几种写法

<Button Content="Hello WPF" />

<Button><Button.Content>Hello WPF</Button.Content></Button>

<Button>Hello WPF</Button>

Content中不能有其他信息,TextBlock的Content例外,可以放置加粗和斜体标签

<TextBlock>
  <Italic>Hello ,</Italic><Bold>XAML</Bold>
</TextBlock>

自定义控件也可以添加Content属性

[ContentProperty("Text")]
public class Book {  public string Text { get; set; } //.. }

<local:Book Name="Self-learning WPF" Price="30.0">Hello WPF</local:Book>

类型转换器

XAML中的字符串通过类型转换器变成CLR对象

自定义类型转换器

<local:Book Name="Self-learning WPF" Price="$5" />

public class Book
{

  public MoneyType Price { get; set; }

}

[TypeConverter(typeof(MoneyConverter))]
public class MoneyType
{
  private double value;
  public MoneyType() { this.value = 0; }
  public MoneyType(double value) { this.value = value; }
  public override string ToString() { return this.value.ToString(); }
  public static MoneyType Parse(string value)
  {
    string str = value.Trim();
    if (str[0] == '$')
    {
      string newValue = str.Remove(0, 1);
      double realValue = double.Parse(newValue);
      return new MoneyType(realValue * 8);
    }
    else
    {
      double realValue = double.Parse(value);
      return new MoneyType(realValue);
    }
  }
}

public class MoneyConverter : TypeConverter
{
  public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
  {
    if (sourceType == typeof(string))
      return true;
    return base.CanConvertFrom(context, sourceType);
  }

  public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
  {
    if (destinationType == typeof(string))
      return true;
    return base.CanConvertTo(context, destinationType);
  }

  public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
  {
    if (value.GetType() != typeof(string))
      return base.ConvertFrom(context, culture, value);
    return MoneyType.Parse((string)value);
  }

  public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
  {
    if (destinationType == typeof(string))
      return base.ConvertTo(context, culture, value, destinationType);
    return value.ToString();
  }

}

CanConvertFrom\CanConvertTo\ConvertFrom\ConvertTo这四个方法需要重写

标记扩展

XAML有以下情况无法支持

1.将属性赋值为null

2.将属性赋值给已经静态变量

不同于类型转换器的隐式转换,标记扩展通过显示的语法调用实现

在XAML中只要属性被{}括起来,会被认为是一个标记扩展。

将属性赋值为null {x:Null}

<Button Name="btn01" Content="Button" Click="btn01_Click_1" Background="{x:Null}" />

将属性赋值给已经静态变量

<Button Name="btn01" Content="Button" Click="btn01_Click_1">
  <Button.Background>
    <x:Static Member="SystemColors.ActiveCaptionBrush" />
  </Button.Background>
</Button>

如果想显示的字符串中有{} ,在字符串前添加一个{}

<TextBlock Text="{}{Hello XAML}" />

XAML不止可以应用于WPF

To be continue...

WPF学习之路(二) XAML(续)的更多相关文章

  1. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  2. WPF学习拾遗(二)TextBlock换行

    原文:WPF学习拾遗(二)TextBlock换行 下午在帮组里的同事解决一个小问题,为了以后方便,把就把它收集一下吧. 新建一个TextBlock作为最基础的一个控件,他所携带的功能相对于其他的控件要 ...

  3. WPF学习之路(九)导航和页面(续)

    生命周期 如果Page1成功导航到Page2,首先会触发NavigationService的Navigating事件,标识导航开始.随后创建Page2对象,并且触发NavigationProgress ...

  4. WPF学习(2)XAML

    XAML(eXtensible Application Markup Language,可扩展应用程序标记语言)是一种声明式的编程语言,遵循XML的语法.WPF使用XAML来设计UI具有易用性.高效性 ...

  5. 【WPF学习】第一章 XAML介绍

    XAML(Extensible Application Markup Language的简写,发音为“zammel”)是用于实例化.NET对象的标记语言.尽管XAML是一种应用于诸多不同问题领域的技术 ...

  6. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  7. WPF学习01:初始XAML浅析

    本文内容: 浅析WPF应用默认创建的XAML中元素.attributes. 新建WPF工程“HelloWPF”. 初始创建的主窗体XAML代码如下: <Window x:Class=" ...

  8. Wpf学习之路……

    Wpf学习之路-- Wpf是 .net中一门做winform的技术,和传统的winform的区别在于: 1.         原来的winform就是拖控件,而wpf的控件都死自己拿标记语言(xaml ...

  9. WPF学习之路(二) XAML

    在WPF中引入了XAML语言,主要用于界面设计,业务逻辑则使用C#实现后台代码,将界面设计与业务逻辑分离 XAML是一种声明式语言,类似XML\HTML 示例: <!--Start Tag--& ...

随机推荐

  1. MongoDB在实际项目中的使用

    MongoDB简介 MongoDB是近些年来流行起来的NoSql的代表,和传统数据库最大的区别是支持文档型数据库. 当然,现在的一些数据库通过自定义复合类型,可变长数组等手段也可以模拟文档型数据库. ...

  2. 一个疑难杂症 IIS URL区分大小写(FF的自动变换URL问题)?

    (II8 VS14 CTP3 Windows7 ASP.NET WEBFORM) 在我的印象里面,IIS的URL在一般情况下面是不分大小写的. 所以下面两个URL应该是一样的. http://loca ...

  3. 使用Aspose插件对Excel操作

    使用使用Aspose插件对Excel文档进行导入导出操作 使用前请先下载Aspose插件引用 Excel导入: 前台使用file标签获取,submit方式提交. <form id="f ...

  4. [转]PHP编码规范

    注:这是10年前的一篇PHP编码规范,最早发布于清华水木BBS,现在好像都找不到完整的版本了,但至今看起来仍是非常有参考意义.个人会根据经验做一些调整.文中对于命名一段的描述极大的曾启发了个人的编程体 ...

  5. 管理系统-------------SSH框架书写登录和显示用户

    一.思路的穿插. web.xml中的配置找到--->application.xml---->找到对应的Action---->找到struts.xml----->在去找actio ...

  6. AngularJs学习第一课 Hello World

    首先先介绍一下:AngularJS是干什么的. AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了 ...

  7. web桌面程序之图标拖动排序的分析

    在web桌面程序里,图标拖动并重新排序是个比较常见的功能.这个功能我之前反复修改了好几遍,现在终于整理出了比较理想的解决思路,决定拿出来分享下. 这一功能主要有哪些难点呢?我总结了一下一共有2处难点: ...

  8. Dropplets – 极简的 Markdown 博客平台

    Dropplets 是一个简单的博客平台,专注于提供正是你在博客解决方案中需要的.当涉及到基础的博客功能,你真正想要做的是写和发表,而这就是 Dropplets 的过人之处.Dropplets 是一个 ...

  9. 小白的vue学习路程

    最近公司开发新的项目,前端框架选定vue,对于前端小白的我,需要自己学习补充能量. vue的最大特点:响应的数据绑定.组合的视图组件. vue文件里面包含三种:<template>html ...

  10. ie7下<a></a>标签不反应

    view中: <a href="Trading?id=@dr["id"]"> <div class="sy_img_div" ...