栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

xamarin相关知识点(xamarin.forms、异步请求等)

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

xamarin相关知识点(xamarin.forms、异步请求等)

框架代码结构
  • views

    程序员创建的用户页面,views文件夹下的每一个xaml对应一个页面

  • App.xaml

    定义App类,实例化应用程序

  • AppShell.xaml

    生成内容的用户界面,如用户界面是怎么展示的,贴图是什么

Xamarin.Forms 布局 垂直和水平

stackLayout : 垂直方向

  //四周的边界宽度
        

stackLayout:水平方向

修改stackLayout的声明方式


    

控制对齐方式及拓展


    

HorizontalOption是控制对齐方式

VerticalOptions是在HorizontalOption的基础上做拓展

对于垂直对齐方式,每个 Label 在 StackLayout 内占据相同的空间量(值垂直方向的空间量)。 但是,只有最后一个 Label(可将 VerticalOptions 属性设置为 FillAndExpand)具有不同的大小。

网格

将子组织分为行和列

指定行和列


      //属性带s,这个属性是ColumnDefinition对象的几何,对象不带s,注意区分
           //带*的是比例,不带的是绝对值
        
    
    
        
        
    
    

利用Grid.RowSpan=“2” 字段可以选择跨行或者跨列

控件 label

属性

可以利用一些标签来使在一个label中使用多种格式的文本

Button
    

   
       

按钮点击事件

 void OnButtonClicked(object sender, EventArgs e)
 {
     (sender as Button).Text = "Click me again!";
 }

sender as Button用于访问Button对象,这个不能省略

条目


    
        
    

响应文本更改:

void OnEntryTextChanged(object sender, TextChangedEventArgs e) //当文本更改时候
{
    string oldText = e.OldTextValue;
    string newText = e.NewTextValue;
}
 
void OnEntryCompleted(object sender, EventArgs e)   //当文本更改完成后
{
    string text = ((Entry)sender).Text;
}

自定义行为:

  //对输入的字符进行掩码
编辑器

总结:

一般控件都分为这三种特性:

  • 怎么创建的
  • 怎么响应文本更改
  • 自定义行为
图像
  //水平居中

显示本地图片

Android端:

将本地图片拖至 Resources/drawable下面


collectview

可进行条目的内容绑定和响应项选择


void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Monkey selectedItem = e.CurrentSelection[0] as Monkey;
}

可以自定义外观,涉及到一些数据绑定的操作,详情参考

弹出窗口

定义弹出窗口按钮


        

定义弹窗事件:主要是调用调用 DisplayAlert 方法

 async void OnDisplayAlertButtonClicked(object sender, EventArgs e)
 {
     await DisplayAlert("Alert", "This is an alert.", "OK");
 }

async void OnDisplayAlertQuestionButtonClicked(object sender, EventArgs e)
{
    bool response = await DisplayAlert("Save?", "Would you like to save your data?", "Yes", "No");
    Console.WriteLine("Save data: " + response);
}

显示操作工作表

点击按钮 弹出窗体供用户选择

async void OnDisplayActionSheetButtonClicked(object sender, EventArgs e)
{
    //这里的null不能省略,返回用户点击的string
    string action = await DisplayActionSheet("Send to?", "Cancel", null, "Email", "Twitter", "Facebook");
    Console.WriteLine("Action: " + action);
}
生命周期

在APP.xaml.cs中,记录着APP对应的生命周期

  • 应用程序启动时调用 OnStart 方法。
  • 应用程序转到后台时调用 OnSleep 方法。
  • 应用程序从后台恢复时调用 OnResume 方法。

应用:在设备重启的时候,利用在后台保存的数据,重新在设备中加载进来

App.xaml.cs

using System;
using Xamarin.Forms;

namespace AppLifecycleTutorial
{
    public partial class App : Application
    {
        const string displayText = "displayText";

        public string DisplayText { get; set; }

        public App()
        {
            InitializeComponent();

            MainPage = new MainPage();
        }

        protected override void OnStart()
        {
            Console.WriteLine("OnStart");

            if (Properties.ContainsKey(displayText))
            {
                DisplayText = (string)Properties[displayText];
            }
        }

        protected override void OnSleep()
        {
            Console.WriteLine("OnSleep");
            //利用Properties来保存数据,这个字典是会自动保存在Properties上面的
            Properties[displayText] = DisplayText;  
        }

        protected override void OnResume()
        {
            Console.WriteLine("OnResume");
        }
    }
}

页面代码:

//xaml


    
        
    

            
//xaml.cs
protected override void OnAppearing()  OnAppearing()会在页面加载时候调用
{
    base.OnAppearing();  

    entry.Text = (Application.Current as App).DisplayText;
}

void OnEntryCompleted(object sender, EventArgs e)
{
    (Application.Current as App).DisplayText = entry.Text;
}
.Net Core post请求注意事项

前端向ASP .Net Core Post 类型Api发送请求的时候,接受参数注意

1、如果客户端Content-Type是application/json, api接口如果是用单个对象做参数的时候,加或者不加[FromBody]都可以正常解析参数,但是接口是用对象列表做参数时候,则必须加[FromBody],否则读取不到参数。

2、如果客户端Content-Type不是application/json,api接口必须加[FromForm],否则客户端调用接口会报400错误。

3、如果加上[FromBody],客户端Content-Type不是application/json,接口会报400错误。

总结:

客户端如果提交Json数据时候,都加上[FromBody]

如果客户端提交的数据Content-Type如果不为application/json时,会报错,如果要解决报错,需要在接口上加上[FromForm]。

发送post请求构造json字符串:

var data = new
{
    name,
    passwd
};
string json = JsonConvert.SerializeObject(data); //json也是一个string 类型
var content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response = await http.PostAsync(uri, content);

解析后端传过来的json字符串:

 var content = await response.Content.ReadAsStringAsync();
JObject con = JObject.Parse(content);
string str = con["name"].ToString()
异步与多线程

I/O密集型用异步

c#5.0以上利用async、await语法糖

计算密集型用多线程

进程是资源分配的最小单位,线程是调度的最小单位。

进程的并发需要涉及到很多的上下文切换(保存现场,恢复现场等),需要耗费大量的时间,而相比而言,切换线程所需要的开销更小。

为什么要引入进程和线程

  1. 提高CPU利用率,在早期的单道批处理系统中,如果执行中的代码需要依赖与外部条件,将会导致CPU空闲,例如文件读取,等待键盘信号输入,这将浪费大量的CPU时间。引入多进程和线程可以解决CPU利用率低这个问题。
  2. 隔离程序之间的数据(每个进程都有单独的地址空间),保证系统运行的稳定性。
  3. 提高系统的响应性和交互能力。
模型类中的get、set

模型类的通俗理解:这个类本身是用来作为模型传数的,不做一些逻辑的处理

public class person
{
    public string name;
}

public class person
{
    public string Name{set;get;}
}

比较这两个类:

第一个类没有对name私有属性进行封装,而第二个类进行了封装,便于对Name属性进行读和写

例如:

private string name;
public string Name
{
    get { return name; }
    set
    {
        name = String.IsNullOrEmpty(value) ? "空" : value;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1023925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号