XAML基础

时间:2022-08-14 21:53:12

1.标记扩展

将一个对象的属性值依赖在其他其他对象的某个属性上

用法:标记属性的一般用法是:Attribute = Value,使用标记拓展,Value字符串是由一对花括号及其括起来的内容组成,XAML编译器会对这样的内容作出解析、生成相应的对象

例如:

<Window x:Class="标记拓展.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel Background="LightSlateGray">
<TextBox Text="{Binding ElementName=slider1,Path=Value,Mode=OneWay}" Margin="5"></TextBox>
<Slider Name="slider1" Margin="5"></Slider>
</StackPanel>
</Grid>
</Window>

TextBox的Value值依赖在Slider的Value上

以上的写法相当于:

<TextBox Margin="5">
<TextBox.Text>
<Binding ElementName="slider1" Path="Value" Mode="OneWay"></Binding>
</TextBox.Text>
</TextBox>

不这也写的原因是,代码量增加了、阅读不方便

注意:并不是所有对象都可以用标记拓展的语法来写,只有MarkupExtension类的派生类才能使用标记拓展的语法来创建对象

2.代码后置Code-Behind

将逻辑代码与UI代码分离,隐藏在UI代码后面的形式

可以使用x:Code标签,把应该呆在后置代码里的C#代码搬到XAML文件来,例如:

<Window x:Class="代码后置.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Name="button1" Click="button1_Click_1"></Button>
</Grid>
<x:Code>
<![CDATA[
private void button1_Click_1(object sender, RoutedEventArgs e)
{
MessageBox.Show("ABC");
}
]]>
</x:Code>
</Window>

3.导入程序集和引用其中的命名空间

1)在XAML中引用命名空间的语法是:

xmlns:映射名=“clr-namespace:类库中名称空间的名字;assembly=类库文件名”

比如类库程序集名为:MyLibrary.dll,其中包括Common和Controls两个名称空间,在XAML中引用会是:

xmlns:common=“clr-namespace:Common;assembly=MyLibrary”

xmlns:controls=“clr-namespace:Controls;assembly=MyLibrary”

2)使用命名空间里的类:

<映射名:类名>...</映射名:类名>

比如:

<common:MessagePanel x:Name="window1" />

4.注释

语法:<!--被注释的内容-->

注意:

1)只能出现在开始标签和结束标签之间

2)不能注释标签的Attribute

3)注释不能嵌套