Xamarin.Forms自定義XAML控件

在Xamarin.Forms工程中使用XAML創(chuàng)建自定義控件。
參考:Creating Reusable XAML User Controls with Xamarin Forms
源代碼:XamarinCustomControl

作用

  1. 拆分復(fù)雜頁面;
  2. 復(fù)用組件。

創(chuàng)建控件

  1. 新建一個普通頁面,包含XAML文件和cs文件;
  2. 將XAML中的ContentPage改為任意布局,并在其中放置控件的子元素,可以使用Binding將子元素的屬性綁定到外部變量:
    <?xml version="1.0" encoding="UTF-8"?>
    <StackLayout xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="CustomControlTest.MyCustomControl">
        <Image x:Name="Icon" Source="{Binding Icon}" />
        <Label x:Name="Text" Text="{Binding Title}" HorizontalOptions="Center" LineBreakMode="NoWrap" Font="Small" />
        <Button x:Name="Login" Text="Login" Clicked="OnLoginClicked"/>
    </StackLayout>
    
  3. 將.cs文件中的基類由ContentPage改為XAML中對應(yīng)的布局,可以用類的成員將控件子元素的屬性或子元素本身暴露到外部:
    public partial class MyCustomControl : StackLayout
    {
        //暴露子元素的屬性
        public Color TextColor
        {
            get { return this.Text.TextColor; }
            set { this.Text.TextColor = value; }
        }
    
        //暴露子元素
        public Label TextControl
        {
            get { return this.Text; }
            set { this.Text = value; }
        }
    
        //響應(yīng)子元素的事件
        public void OnLoginClicked(object sender, EventArgs e) {
        }
    }
    

引用控件

  1. 在外部頁面的XAML中,為ContentPage標(biāo)簽添加屬性:
    xmlns:custom_controls="clr-namespace:CustomControlTest;assembly=CustomControlTest.App"
    
  2. 在外部頁面的XAML中引用控件并設(shè)置綁定的變量:
    <custom_controls:MyCustomControl x:Name="qqLogin" BindingContext="{Binding QQ}"/>
    
  3. 在外部頁面的.cs文件中定義綁定到控件的變量和訪問控件屬性:
    //定義綁定到控件的變量
    this.QQ = new MyControlSpec { Icon = "qq_logo", Title = "QQ" };
    BindingContext = this;
    
    //設(shè)置控件的屬性
    this.qqLogin.TextColor = Color.Blue;
    
    //通過控件屬性獲取子元素
    Label wxLabel = this.wxLogin.TextControl;
    wxLabel.FontSize = 20;
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評論 19 139
  • ¥開啟¥ 【iAPP實現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,391評論 0 17
  • 一、Android開發(fā)初體驗 二、Android與MVC設(shè)計模式模型對象存儲著應(yīng)用的數(shù)據(jù)和業(yè)務(wù)邏輯。模型類通常用來...
    為夢想戰(zhàn)斗閱讀 1,079評論 0 3
  • 2016年12月20日整理 波妞經(jīng)典語錄: 1,奶奶,你最會燒飯了,你應(yīng)該開個飯店!把你會做的菜都說給我聽吧!蛋炒...
    Ada與一谷一麥閱讀 1,895評論 0 0
  • Yesterday's small group turned out to be pleasant. I rece...
    wxjjing77gmailc閱讀 906評論 0 2

友情鏈接更多精彩內(nèi)容