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 官方解释:

指定粗细

Margin Padding 属性的类型都是 Thickness 有三种可能的创建时Thickness结构:

  • 创建 Thickness 结构定义的单个统一值。 单个值应用于左侧、 顶部、 右侧和底部均带有的元素。
  • 创建 Thickness 水平和垂直值所定义的结构。 所需应用到左侧和右侧的元素,与所需应用于元素的顶部和底部旁边的垂直值进行水平值。
  • 创建 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页面跳转:

官方关系图:
  

在添加新页面的时候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。

猜你喜欢

转载自www.cnblogs.com/yangchaojie/p/9203781.html
今日推荐