您好,欢迎访问三七文档
第二章XAML语法XAML文档树形结构(ex301)一个运行的界面:XAML使用树形逻辑结构来描述它。Windowx:Class=ex301.MainWindowxmlns=:x==WindowHeight=173Width=296StackPanelBackground=LightBlueTextBoxx:Name=textBox1Margin=5/TextBoxTextBoxx:Name=textBox2Margin=5/TextBoxStackPanelOrientation=HorizontalTextBoxx:Name=textBox3Width=140Margin=5/TextBoxTextBoxx:Name=textBox4Width=120Margin=5/TextBox/StackPanelButtonx:Name=button1Margin=5ImageSource=p0009.pngWidth=23Height=23/Image/Button/StackPanel/Window这段XAML的结构如下图:还可以换一种方式来描述它Windowx:Class=ex301.Window2xmlns=:x==Window2Height=190Width=300GridBackground=LightSlateGray!--等比缩放窗口--Grid.ColumnDefinitionsColumnDefinitionWidth=7*/ColumnDefinitionColumnDefinitionWidth=3*/ColumnDefinition/Grid.ColumnDefinitionsGrid.RowDefinitionsRowDefinitionHeight=33/RowDefinitionRowDefinitionHeight=33/RowDefinitionRowDefinitionHeight=33/RowDefinitionRowDefinitionHeight=40/RowDefinition/Grid.RowDefinitionsTextBoxx:Name=textBox1Grid.Column=0Grid.Row=0Grid.ColumnSpan=2Margin=5/TextBoxTextBoxx:Name=textBox2Grid.Column=0Grid.Row=1Grid.ColumnSpan=2Margin=5/TextBoxTextBoxx:Name=textBox3Grid.Column=0Grid.Row=2Grid.ColumnSpan=1Margin=5/TextBoxTextBoxx:Name=textBox4Grid.Column=1Grid.Row=2Grid.ColumnSpan=1Margin=5/TextBoxButtonx:Name=button1Grid.Column=0Grid.Row=3Grid.ColumnSpan=2Margin=5ImageSource=p0009.pngWidth=23Height=23/Image/Button/Grid/Window这段XAML的结构如下图:XAML中为对象赋值1)使用标签为Attribute为对象属性赋值(ex302)Windowx:Class=ex302.MainWindowxmlns=:x==MainWindowHeight=350Width=525GridVerticalAlignment=CenterHorizontalAlignment=CenterRectanglex:Name=rectangleWidth=200Height=120Fill=Blue/Rectangle/Grid/Window运行的效果如下图这里是将“Blue”这个字符串付给了Fill属性。当然,也可以直接使用后台代码进行赋值。//...SolidColorBrushsBrush=newSolidColorBrush();sBrush.Color=Colors.AliceBlue;this.rectangle.Fill=sBrush;//...运行的效果如下图使用TypeConverter类将XAML标签的Attribute与对象的Porperty进行映射见例子(ex303).属性元素XAML中,非空标签的内容子级标签都是父级标签内容的一个元素(Element),简称为父标签的一个元素。即以元素的形式来表达一个实例的属性。在属性是复杂对象的时候,这种语法比较有优势。如下面的例子:GridVerticalAlignment=TopHorizontalAlignment=CenterRectanglex:Name=rectangleWidth=200Height=120Rectangle.FillLinearGradientBrushLinearGradientBrush.StartPointPointX=0Y=0/Point/LinearGradientBrush.StartPointLinearGradientBrush.EndPointPointX=1Y=1/Point/LinearGradientBrush.EndPointLinearGradientBrush.GradientStopsGradientStopCollectionGradientStopOffset=0.3Color=LightBlue/GradientStopGradientStopOffset=0.7Color=Blue/GradientStopGradientStopOffset=1.0Color=DarkBlue/GradientStop/GradientStopCollection/LinearGradientBrush.GradientStops/LinearGradientBrush/Rectangle.Fill/Rectangle/Grid这段代码,用线性简便画填充矩形。效果如下图:技巧:StartPoint=”0,0”,EndPoin=”1,1”是默认值,可以省略,GradientStopCollection标签也可以省略。因此,前面的代码,可以如下简化:GridVerticalAlignment=CenterHorizontalAlignment=CenterRectanglex:Name=rectangle2Width=200Height=120Rectangle.FillLinearGradientBrushLinearGradientBrush.GradientStopsGradientStopOffset=0.3Color=LightBlue/GradientStopGradientStopOffset=0.7Color=Blue/GradientStopGradientStopOffset=1.0Color=DarkBlue/GradientStop/LinearGradientBrush.GradientStops/LinearGradientBrush/Rectangle.Fill/Rectangle/Grid一般来说,能使用Attribute=Value形式赋值的,就不使用属性元素赋值。4)标记扩展(ex305)标记扩展,实际上是一种特殊的Attribute=value语法,其特殊的地方在于Value字符串是由一对花括号及其括起来的内容组成。比如下面的代码:StackPanelBackground=LightSlateGrayTextBoxText={BindingElementName=slider1,Path=Value,Mode=OneWay}Margin=5/TextBoxSliderx:Name=slider1Margin=5/Slider/StackPanel这段代码实现的效果是文本框的值,随着滚动块的滑动变化。如下图用属性标签实现的方法如下:StackPanelBackground=LightSlateGrayTextBoxMargin=5TextBox.TextBindingElementName=slider1Path=ValueMode=OneWay/Binding/TextBox.Text/TextBoxSliderx:Name=slider1Margin=5/Slider/StackPanel标记扩展的语法简洁方便,但并不是所有对象都能用标记扩展的语法来书写,只有MarkupExtension类的派生类(直接或间接均可)才能使用标记扩展语法来创建对象。3、事件处理与代码后置(ex306)当我们为一个XAML标签的事件性Attribute进行赋值时,XAML编辑器会自动为我们生成相应的事件处理器。事件处理器是使用C#语言编写的函数。下面以Button标签为例:Buttonx:Name=Button1Click=Button1_Click/Button在Button标签中,定义了“Click”事件Attribute。同时,在后台代码文件中,也生成了对应的事件处理代码:privatevoidButton1_Click(objectsender,RoutedEventArgse){}这句XAML翻译成C#代码,基本上就是:Buttonbutton1=newButton();button1.Click+=newRoutedEventHandler(Button1_Click);x:Code(ex307)这个标签可以让后置代码文件的C#代码搬到XAML文件里来。x:Code的内容一定要使用XML语言的![CDATA[…]]转义标签。如下面代码:Windowx:Class=EX1.Window7xmlns=:x==Window7Height=300Width=300GridButtonName=button1Click=button1_Click/Button/Gridx:Code![CDATA[privatevoidbutton1_Click(objectsender,RoutedEventArgse){MessageBox.Show(Bye!Code-Behind!);}]]/x:Code/
本文标题:XMAL语法
链接地址:https://www.777doc.com/doc-5256187 .html