WPF学习之路(二) XAML(续)
属性
简单属性
前面用到的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(续)的更多相关文章
- WPF学习之路初识
WPF学习之路初识 WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...
- WPF学习拾遗(二)TextBlock换行
原文:WPF学习拾遗(二)TextBlock换行 下午在帮组里的同事解决一个小问题,为了以后方便,把就把它收集一下吧. 新建一个TextBlock作为最基础的一个控件,他所携带的功能相对于其他的控件要 ...
- WPF学习之路(九)导航和页面(续)
生命周期 如果Page1成功导航到Page2,首先会触发NavigationService的Navigating事件,标识导航开始.随后创建Page2对象,并且触发NavigationProgress ...
- WPF学习(2)XAML
XAML(eXtensible Application Markup Language,可扩展应用程序标记语言)是一种声明式的编程语言,遵循XML的语法.WPF使用XAML来设计UI具有易用性.高效性 ...
- 【WPF学习】第一章 XAML介绍
XAML(Extensible Application Markup Language的简写,发音为“zammel”)是用于实例化.NET对象的标记语言.尽管XAML是一种应用于诸多不同问题领域的技术 ...
- Redis——学习之路二(初识redis服务器命令)
上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息 s ...
- WPF学习01:初始XAML浅析
本文内容: 浅析WPF应用默认创建的XAML中元素.attributes. 新建WPF工程“HelloWPF”. 初始创建的主窗体XAML代码如下: <Window x:Class=" ...
- Wpf学习之路……
Wpf学习之路-- Wpf是 .net中一门做winform的技术,和传统的winform的区别在于: 1. 原来的winform就是拖控件,而wpf的控件都死自己拿标记语言(xaml ...
- WPF学习之路(二) XAML
在WPF中引入了XAML语言,主要用于界面设计,业务逻辑则使用C#实现后台代码,将界面设计与业务逻辑分离 XAML是一种声明式语言,类似XML\HTML 示例: <!--Start Tag--& ...
随机推荐
- 简单的ASP.NET MVC发布
学习这样久的ASP.NET MVC,但一直没有实现过发布MVC程序.今天来试试. 分两个部分进行,先是第一部分,Visual Studio的publish:创建一个带有实例的ASP.NET MVC: ...
- winform时钟c#代码
代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...
- C#实现WebService服务 项目完整总结
先说一下这个项目做了什么.先介绍一下背景(备注一下,每次项目发生更改之后,要进行clean 和rebuild两个操作,否则最新的更改保存不到exe文件中,这样上线后的系统还是执行得原有的已编译过的程序 ...
- Hibernate总结(二)
在上一篇Hibernate总结(一)简单总结了一级缓存,快照,增删改查的简单使用,这一篇总结两张表的级联操作. 级联涉及到三种情况,many-many,1-many,many-1. 首先是1-many ...
- 初识 PHPunit stub 模拟返回数据
这是这段时间以来结合 PHPunit 文档和大牛们的讲解,想记录下自己学习到的知识,未来参考补充,完善学到的东西 我们一般使用单测对公司业务里的代码进行测试,他会帮忙找到你的一个个小小的思考不够全面的 ...
- js中对象使用
简单记录javascript中对象的使用 一.创建对象 //创建一个空对象 var o={}; //创建一个含有两个属性的对象,x.y var o2={x:12,y:'12',name:'JS'}; ...
- 把Java生成的RSA公钥、私钥转换成.NET使用的XML格式
import java.security.KeyFactory; import java.security.interfaces.RSAPrivateCrtKey; import java.secur ...
- 更新整理本人所有博文中提供的代码与工具(Java,2013.08)
为了更方便地管理博文中涉及的各种代码与工具资源,现在把这些资源迁移到 Google Code 中,有兴趣者可前往下载. Java 1.<高效 Java Web 应用开发框架 JessMA v3. ...
- 【精心挑选】15款最好的 jQuery 网格布局插件(Grid Plugins)
如今,大多数网站设计要靠网格系统和布局,这能够提供给设计人员一个方便的途径来组织网页上的内容.网格的设计最常见于报纸和杂志的版面,由文字和图像构成的列组成. 这篇文章给大家分享精心挑选的15款最佳的 ...
- 经典 HTML5 & Javascript 俄罗斯方块游戏
Blockrain.js 是一个使用 HTML5 & JavaScript 开发的经典俄罗斯方块游戏.只需要复制和粘贴一段代码就可以玩起来了.最重要的是,它是响应式的,无论你的显示屏多么宽都能 ...