wp7 XAML基础

简介:

XAML是Extensible Application Markup Language(可扩展应用程序标记语言)的缩写。它是一种简单的基于XML的用来创建.NET对象及其关系的语言。虽然起初它是为WPF而设计的,用来创建对象树。但现在XAML不仅可用于创建WPF、Sliverlight用户界面,还可以申明Windows工作流(WF)的流程或XPS的标准电子文件。

WPF中所有的类都有一个无参的构造函数和灵活的属性应用。其目的就是为了完全适应XML语言,像XAML中。

XAML的优势:

先说一点就是XAML中所能做的用代码同样可以实现。XAML仅仅是创建和初始化对象的另一种途径。你完全可以不使用XAML来实现WPF应用。在XAML中申明还是在代码里编写完全取决于自己的想法。不过在XAML来申明用户界面有下列一些好处:

  • XAML代码比较简单、清晰、易读
  • 分离的逻辑代码和设计代码
  • 图形设计工具如expression blend都创建的是XAML文件
  • XAML中逻辑和设计的分离也表示了设计者和开发者角色的独立

XAML和代码:

用一个简单的在StackPanel中添加一个文本框和按钮来比较一下XAML和C#代码。

<StackPanel>
    <TextBlock Margin="20">Welcome to the World of XAML</TextBlock>
    <Button Margin="10" HorizontalAlignment="Right">OK</Button>
</StackPanel> 

下面是在C# 代码中相同的效果:

// Create the StackPanel
StackPanel stackPanel = new StackPanel();
this.Content = stackPanel;
 
// Create the TextBlock
TextBlock textBlock = new TextBlock();
textBlock.Margin = new Thickness(10);
textBlock.Text = "Welcome to the World of XAML";
stackPanel.Children.Add(textBlock);
 
// Create the Button
Button button = new Button();
button.Margin= new Thickness(20);
button.Content = "OK";
stackPanel.Children.Add(button);

你可以很清楚的看到XAML版的是很简洁,易读。这就是XAML表达式的强大之处。

元素即属性:

从XML语句<Button Content="OK" />中可以看出属性一般是内嵌书写的。但是,如果我们想在属性中比如Content中放置一个更复杂的对象,像图像、甚至它本身或者一整张网格面板该怎么做呢。我们可以用元素作属性的语法实现。它允许我们提取属性作为它自己的子元素。

<Button>
  <Button.Content>
     <Image Source="Images/OK.png" Width="50" Height="50" />
  </Button.Content>
</Button> 

隐式类型转换:

WPF中一个重要的概念就是隐式类型转换,在后台进行处理。如下面定义了一个BorderBrush,单词“Blue”仅仅是一个字符串。但隐式的BrushConverter会将其转化为一个System.Windows.Media.Brushes.Blue。同样的道理,thickness的值也会隐式的转换为Thickness对象。WPf包含很多这样的内置的类型转换,同时也支持用户自定义的类型转换。

<Border BorderBrush="Blue" BorderThickness="0,10">
</Border> 

 

扩展标签

扩展标签是指在XAML中属性值的动态占位符。它解决了在运行时为属性赋值。扩展标签通常被包含在一组大括号,例如:Background=”{StaticResource NormalBackgroundBrush}"。WPF有一些内置的扩展标签,同时你可以从MarkupExtension衍生出自定义的。这些内置标签有:

  • Binging --- 将两个属性的值绑定在一起
  • StaticResource --- 一次性匹配资源项
  • DynamicResource --- 动态的匹配资源项
  • TemplateBinding --- 将属性的模板控制绑定到属性所依赖的控件上
  • x:Static --- 设定静态属性的值
  • x:NULL --- 返回空(null)

在大括号内的第一个标记是扩展标签的名称。所有后面的都是以属性=值形式的命名参数。下面的例子展示了一个Label,他的内容(Content)被绑定为一个文本框(TestBox)的文本(Text)。当你在文本框中输入值的时候,他的文本属性会改变,绑定的扩展标签会自动的更形Label的内容。

<TextBox x:Name="textBox"/>
<Label Content="{Binding Text, ElementName=textBox}"/>

名字空间:

每一个XAML的开始,都必须包含两个名字空间,第一个是:http://schemas.microsoft.com/winfx/2006/xaml/presentation它映射了所有在System.Windows.Controls下的WPF控件。

第二个是http://schemas.microsoft.com/winfx/2006/xaml,它映射的是System.Windows.Markup下定义的XAML关键字。

XML名字空间和CLR名字空间之间的映射由组装层次(Assembly level)的XmlnsDefinition属性完成。你也可以使用clr-namespace直接在XAML中引用一个CLR名字空间,例如:

<Window xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
        xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”>
</Window>



本文转自夜&枫博客园博客,原文链接:http://www.cnblogs.com/newstart/archive/2012/04/26/2471914.html,如需转载请自行联系原作者
相关文章
|
4天前
|
人工智能 运维 安全
|
2天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
9天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
817 109
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
415 9
|
3天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
4天前
|
机器学习/深度学习 传感器 算法
Edge Impulse:面向微型机器学习的MLOps平台——论文解读
Edge Impulse 是一个面向微型机器学习(TinyML)的云端MLOps平台,致力于解决嵌入式与边缘设备上机器学习开发的碎片化与异构性难题。它提供端到端工具链,涵盖数据采集、信号处理、模型训练、优化压缩及部署全流程,支持资源受限设备的高效AI实现。平台集成AutoML、量化压缩与跨硬件编译技术,显著提升开发效率与模型性能,广泛应用于物联网、可穿戴设备与边缘智能场景。
186 127