Xamarin 基础知识
Xamarin 跨平台处理:
C#:
if (Device.OS == TargetPlatform.Android) { Code…… } else if (Device.OS == TargetPlatform.iOS) { Code…… } Padding = new OnPlatform<Thickness> { Android = new Thickness(0), iOS = new Thickness(0,20,0,0) };
Xaml:
<ContentPage.Padding> <OnPlatformx:TypeArguments="Thickness" iOS = "0,20,0,0" Android = "0" /> </ContentPage.Padding>
Thickness 官方解释:
指定粗细
Xamarin Compilation 编译时校验Xaml语法:
1:校验当前对应Xaml档案:
[XamlCompilation(XamlCompilationOptions.Compile)] public partial class MainPage
2:校验整个 namespace :
[assembly:XamlCompilation(XamlCompilationOptions.Compile)] namespace App3
Xamarin 设置MainPage:
//设置为导航页 MainPage = new NavigationPage(new MainPage()); //Push 新页面 await Navigation.PushAsync(new HelloXamlPage()); //主页面 MainPage = new new MainPage();
Xamarin StaskLayout:
StackLayout默认为垂直布局,类似于Android的LinearLayout,其中最常用的布局属性:
//水平 HorizontalOptions="Center" //垂直 VerticalOptions="Center"
在C#代码中声明StaskLayout,添加Label标签,并加载到PageContent中:
var stacklayout = new StackLayout { HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center }; //创建Label添加到StackLayout中 stacklayout.Children.Add(new Label { Text = "Label1" }); //将stacklayout加载到Page中 Content = stacklayout;
可以使用 Spacing 来设置间距:
<StaskLayoutSpacing = "10"></StaskLayout >
Xamarin GridLayout:
在 Xaml 中定义GridLayout代码如下:
<Grid> <Grid.RowDefinitions> <RowDefinitionHeight="*"/> <RowDefinitionHeight="*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinitionWidth="*"/> <ColumnDefinitionWidth="*"/> </Grid.ColumnDefinitions> <LabelText="Top Left"BackgroundColor="Red"Grid.Row="0"Grid.Column="0"/> <LabelText="Top right"BackgroundColor="Green"Grid.Row="0"Grid.Column="1"/> <LabelText="bottom Left"BackgroundColor="Blue"Grid.Row="1"Grid.Column="0"/> <LabelText="bottom right"BackgroundColor="Yellow"Grid.Row="1"Grid.Column="1"/> </Grid>
在 定义行中 RowDefinitions 中指定数量与高度,在定义列ColumnDefinitions 中声明宽度。
在需要添加到Grid中的控件中指定坐标 Grid.Row Grid.Column 定义位置。
var grid = new Grid(); grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1,GridUnitType.Star) }); grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1,GridUnitType.Star) });
C#创建Grid,可以使用 grid.Children.Add(new ……,row,col) 方式添加控件。
再来说 设定宽高的种方式:
1 : * == Star 可使用Auto,按比例划分。
2 : Absolute 绝对定位,可以使用px类似单位指定宽高。
Xamarin Navigation页面跳转:
官方关系图:
![](https://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/app-fundamentals/navigation/hierarchical-images/pushing.png)
![](https://docs.microsoft.com/zh-cn/xamarin/xamarin-forms/app-fundamentals/navigation/hierarchical-images/popping.png)
在添加新页面的时候PUSH,返回 POP。
点击到下一页和返回上一页Demo:
Click 事件:
<Button Text="Click Me" Clicked="Button_Clicked" />
PUSH :
async private void Button_Clicked(object sender, EventArgs e) { await Navigation.PushModalAsync(new Page1()); }
POP :
async privatevoidButton_Clicked(object sender, EventArgs e) { await Navigation.PopModalAsync(); }
如果在App中声明 如 : MainPage main = new NavigationPage(new Main());
Navigation.PushModalAsync 去掉 Modal。