一个好老好老的老程序员了。
全部博文(915)
分类: Android平台
2017-11-19 21:14:10
要开始编辑您的第一个XAML文件,请使用Visual Studio或Visual Studio for Mac创建一个新的Xamarin.Forms解决方案。 (选择对应于您的环境的页面顶部的选项卡。)
在Windows中,使用Visual Studio从菜单中选择“文件”>“新建”>“项目”。 在“新建项目”对话框中,选择左侧的Visual C#>跨平台,然后从中心列表中选择跨平台应用程序(Xamarin.Forms或Native)
为解决方案选择一个位置,给它一个XamlSamples的名称(或任何您喜欢的),然后按OK。
在下一个屏幕上,选择空白应用程序模板,Xamarin.Forms UI技术和便携式类库(PCL)代码共享策略:
按OK。
解决方案中创建了四个项目:XamlSamples可移植类库(PCL),XamlSamples.Android,XamlSamples.iOS和通用Windows平台解决方案XamlSamples.UWP。
在创建XamlSamples解决方案之后,您可能希望通过选择各种平台项目作为解决方案启动项目来测试开发环境,并在手机模拟器或实际设备上构建和部署由项目模板创建的简单应用程序。
除非需要编写特定于平台的代码,否则共享的XamlSamples PCL项目就是您几乎花费所有编程时间的地方。 这些文章不会冒险在这个项目之外。
在XamlSamples可移植类库中有一对文件,其名称如下:
您需要单击App.xaml旁边的箭头以查看代码隐藏文件。
App.xaml和App.xaml.cs都有助于派生自Application的名为App的类。 大多数其他具有XAML文件的类都有助于派生自ContentPage的类; 这些文件使用XAML来定义整个页面的可视内容。 XamlSamples项目中的其他两个文件也是如此:
MainPage.xaml文件如下所示:
点击(此处)折叠或打开
两个XML名称空间(xmlns)声明引用了URI,第一个看起来在Xamarin网站上,第二个在微软。不要麻烦检查这些URI指向什么。那里什么都没有它们只是Xamarin和Microsoft拥有的URI,它们基本上是作为版本标识符的。
第一个XML名称空间声明意味着在XAML文件中定义的没有前缀的标签引用Xamarin.Forms中的类,例如ContentPage。第二个名称空间声明定义了x的前缀。这用于XAML自身固有的几个元素和属性,并且由XAML的其他实现支持。但是,这些元素和属性根据嵌入URI的年份略有不同。 Xamarin.Forms支持2009年的XAML规范,但不是全部。
本地名称空间声明允许您访问PCL项目中的其他类。
在第一个标签的末尾,x前缀用于名为Class的属性。因为这个x前缀的使用对于XAML命名空间来说实际上是通用的,所以像XAML这样的XAML属性几乎总是被称为x:Class。
x:Class属性指定完全限定的.NET类名称:XamlSamples名称空间中的MainPage类。 这意味着这个XAML文件在XamlSamples名称空间中定义了一个名为MainPage的新类,该名称空间派生自ContentPage - x:Class属性出现的标记。
x:Class属性只能出现在XAML文件的根元素中,以定义派生的C#类。 这是XAML文件中唯一定义的新类。 在XAML文件中出现的其他一切只是从现有的类实例化并初始化。
MainPage.xaml.cs文件看起来像这样(除了未使用的使用指令):
点击(此处)折叠或打开
对于更有趣的视觉效果,您只需要更有趣的XAML。
测试该程序在继续之前仍然编译和部署。
要将其他基于XAML的ContentPage类添加到项目中,请选择XamlSamples PCL项目并调用Project> Add New Item菜单项。 在Add New Item对话框的左侧,选择Visual C#和Xamarin.Forms。 从列表中选择内容页面(不是内容页面(C#),它创建一个只有代码的页面,或内容视图,这不是一个页面)。 给页面一个名字,例如HelloXamlPage.xaml:
将两个文件添加到项目HelloXamlPage.xaml和代码隐藏文件HelloXamlPage.xaml.cs中。
编辑HelloXamlPage.xaml文件,以便唯一的标签是ContentPage和ContentPage.Content的标签:
点击(此处)折叠或打开
点击(此处)折叠或打开
还要注意在根标签上已经设置了Title属性。
此时,类,属性和XML之间的关系应该是明显的:Xamarin.Forms类(如ContentPage或Label)作为XML元素出现在XAML文件中。该类的属性(包括ContentPage上的Title和Label的七个属性)通常显示为XML属性。
存在许多快捷方式来设置这些属性的值。一些属性是基本的数据类型:例如,Title和Text属性的类型是String,Rotation是Double类型的,而IsVisible(默认情况下是true,在这里只是为了说明而设置)是Boolean类型的。
HorizontalTextAlignment属性的类型是TextAlignment,它是一个枚举。对于任何枚举类型的属性,所有你需要提供的是一个成员名称。
然而,对于更复杂类型的属性,转换器用于解析XAML。这些是从TypeConverter派生的Xamarin.Forms中的类。许多是公开课,但有些不是。对于这个特定的XAML文件,其中的几个类在后台扮演一个角色:
这些转换器管理属性设置的允许语法。
ThicknessTypeConverter可以处理由逗号分隔的一个,两个或四个数字。 如果提供一个号码,则适用于所有四方。 用两个数字,第一个是左右填充,第二个是上下。 四个数字按照左,上,右,下的顺序排列。
LayoutOptionsConverter可以将LayoutOptions结构的公共静态字段的名称转换为LayoutOptions类型的值。
FontSizeConverter可以处理NamedSize成员或数字字体大小。
ColorTypeConverter接受Color结构的公共静态字段的名称或十六进制RGB值,带有或不带有Alpha通道,前面带有数字符号(#)。 这里是没有alpha通道的语法:
TextColor="#rrggbb"
每个小写字母都是十六进制数字。 这里是如何包含一个alpha通道:
TextColor="#aarrggbb">
对于alpha通道,请记住FF是完全不透明的,而00是完全透明的。
其他两种格式允许您为每个通道只指定一个十六进制数字:
TextColor="#rgb" TextColor="#argb"
在这些情况下,重复该数字以形成该值。 例如,#CF3是RGB颜色CC-FF-33。
当您运行XamlSamples程序时,显示MainPage。 要查看新的HelloXamlPage,可以将其设置为App.xaml.cs文件中的新启动页面,或者从MainPage导航到新页面。
要实现导航,首先要更改App.xaml.cs构造函数中的代码,以便创建一个NavigationPage对象:
点击(此处)折叠或打开
在MainPage.xaml.cs构造函数中,可以创建一个简单的Button并使用事件处理程序导航到HelloXamlPage:
点击(此处)折叠或打开
您可以使用iOS上的<返回按钮,使用页面顶部的左侧箭头或Android手机底部的左侧箭头或使用Windows 10 Mobile页面底部的左侧箭头导航回MainPage。
随意尝试使用XAML来呈现标签的不同方式。 如果您需要将任何Unicode字符嵌入到文本中,则可以使用标准的XML语法。 例如,要将问候语放在智能报价中,请使用:
点击(此处)折叠或打开
以下是它的样子:
HelloXamlPage示例只包含页面上的一个标签,但这非常不寻常。 大多数ContentPage衍生物将Content属性设置为某种布局,如StackLayout。 StackLayout的Children属性被定义为IList 类型,但是它实际上是一个ElementCollection 类型的对象,并且该集合可以被填充多个视图或其他布局。 在XAML中,这些父子关系是用普通的XML层次结构建立的。 下面是一个名为XamlPlusCodePage的新页面的XAML文件:
点击(此处)折叠或打开
这个XAML文件在语法上是完整的,下面是它的样子:
但是,您可能会认为该计划在功能上存在缺陷。 也许滑块应该使标签显示当前的值,而按钮可能是打算在程序中做一些事情。
正如您将在第4部分中看到的那样。使用数据绑定基础知识,使用标签显示滑块值的工作完全可以在数据绑定的XAML中处理。 但首先看代码解决方案是有用的。 即使如此,处理按钮点击肯定需要代码。 这意味着XamlPlusCodePage的代码隐藏文件必须包含Slider的ValueChanged事件和Button的Clicked事件的处理程序。 我们来添加它们:
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
x:Name属性的x前缀表示此属性是XAML固有的。
分配给x:Name属性的名称与C#变量名称具有相同的规则。 例如,它必须以字母或下划线开始,不包含嵌入的空格。
现在,ValueChanged事件处理程序可以将Label设置为显示新的Slider值。 新的值可以从事件参数中获得:
点击(此处)折叠或打开
点击(此处)折叠或打开
现在为按钮。 让我们通过用按钮的文本显示一个警报模拟对点击事件的响应。 事件处理程序可以安全地将sender参数强制转换为Button,然后访问其属性:
点击(此处)折叠或打开
点击(此处)折叠或打开
该字段的声明允许变量在您管辖的XamlPlusCodePage部分类文件中的任意位置自由使用。在运行时,在分析XAML之后分配字段。这意味着当XamlPlusCodePage构造函数开始时valueLabel字段为空,但在调用InitializeComponent之后有效。
在InitializeComponent将控制返回给构造函数之后,页面的可视化已经被构建,就好像它们已经被实例化并在代码中初始化一样。 XAML文件不再在类中扮演任何角色。您可以以任何您想要的方式在页面上操作这些对象,例如将视图添加到StackLayout,或者将页面的Content属性完全设置为其他内容。您可以通过检查页面的“内容”属性和“布局的子集合”中的项目来“走路”。您可以以这种方式设置访问视图的属性,或动态地为它们分配事件处理程序。
随意。这是您的页面,而XAML只是构建其内容的工具。
通过这个介绍,您已经看到了XAML文件和代码文件如何对类定义做出贡献,以及XAML和代码文件如何交互。 但是XAML也有其独特的语法功能,可以非常灵活地使用它。 您可以在第2部分开始探索这些内容。基本的XAML语法。