XAML的语法概述及特性

XAML是什么

XAML是一种声明性标记语言,可以用于创建程序UI,例如形状、控件、文本、按钮等一切可以显示在屏幕上的组件。XAML具有包含元素和属性,赋予元素不同的属性来显示出来出现不同的效果。

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <Button Content="This is a button !"/>
</Grid>
<!--实例化对象,在UI中创建一个按钮显示出来-->

属性元素语法

语言难以表达,用一个实例表达此含义。

<Button>
 <Button.Background><!--设置背景颜色-->
   <SolidColorBrush Color="Blue"/>
 </Button.Background>
 <Button.Foreground><!--设置前景色 显示-->
   <SolidColorBrush Color="Red"/>
 </Button.Foreground><!--按钮上的文字内容-->
 <Button.Content> This is a button </Button.Content>
</Button>

集合语法

可以理解为设置了集合属性的数值

<LinearGradientBrush.GradientStops>是集合属性,其内部可以添加多个GradientStop来实现元素渐变效果。实例如下:

<LinearGradientBrush>
  <LinearGradientBrush.GradientStops>
    <GradientStop Offset="0.0" Color="Red" />
    <GradientStop Offset="1.0" Color="Blue" />
  </LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<!--LinearGradientBrush使用沿直线(渐变轴)定义的渐变绘制区域。
使用对象指定渐变的颜色及其在渐变轴上的位置 GradientStop 。-->

!https://www.ahbug.com/wp-content/uploads/2022/01/2b71bc67913d6b3.jpg

XAML内容属性

仅对内容属性而言,可以在 XAML 标记中设置该属性时省略属性元 素,并在标记中生成更直观的父级/子级形式。

<Border>
<TextBox Width="300"/>
</Border>
<Border>
 <Border.Child>
   <TextBox Width="300"/>
 </Border.Child>
</Border>

上例中第一个元素使用内容属性省略Border.Child属性元素,第二个元素显式显示Border.Child

文本内容

XAML 元素可直接将文本作为其内容来处理。 若要实现此功能,必须满足以下条件之一:

  • 类必须声明一个内容属性,并且该内容属性必须是可赋值给字符串的类型(该类型可以是 Object)。
  • 类型必须声明一个类型转换器,该类型转换器将文本内容用作初始化文本。 例如, 将 Blue 的内容值转换为画笔。 这种情况实际上并不常见。
  • 类型必须为已知的 XAML 语言基元。
<StackPanel>
 <Button>First Button</Button><!--按钮文本显示-->
 <Button>Second Button</Button>
</StackPanel>

上例中Button是StackPanel的子元素,

  • 省略了 StackPanel.Children 属性元素: StackPanel 派生自 Panel 。 Panel 将 Panel.Children 定义为其 XAML 内容属性。
  • 省略了 UIElementCollection 对象元素: Panel.Children 属性采用类型 UIElementCollection, 该类型实现 IList 。根据处理IList 等集合的XAML 规则,集合的元素标记可以省略。

特性语法(事件)

特性语法还可用于事件成员,而非属性成员。 在这种情况下,特性的名称为事件的名称。 在 XAML 事件的 WPF 实现中,特性的值是实现该事件的委托的处理程序的名称。

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="ExampleNamespace.ExamplePage">
  <Button Click="Button_Click" >Click Me!</Button>
</Page>

上例中将Click事件赋予给在标记中创建的Button。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    请登录后查看评论内容