При добавлении новой страницы XAML в проект также одновременно добавляется файл кода C#. Так, при создании проекта в него по умолчанию добавляется файл с графическим интерфейсов в XAML - MainPage.xaml и файл MainPage.xaml.cs, где, как предполагается, должна находится логика приложения, связанная с разметкой из файла XAML.
Файлы XAML позволяют нам определить интерфейс окна, но для создания логики приложения, например, для определения обработчиков событий элементов управления, нам все равно придется воспользоваться кодом C#.
По умолчанию в файле XAML определен атрибут x:Class:
x:Class="HelloApp.MainPage"
Атрибут x:Class="HelloApp.MainPage
указывает на класс, который будет представлять данную страницу и в который будет компилироваться код в XAML
при компиляции. То есть во время компиляции будет генерироваться класс HelloApp.MainPage
, унаследованный от класса ContentPage.
Кроме того в файле отделенного кода MainPage.xaml.cs, мы также можем найти класс с тем же именем, который по умолчанию он имеет некоторый код:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; namespace HelloApp { public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); } } }
Этот практически пустой класс уже выполняет некоторую работу. Во время компиляции этот класс объединяется с классом, сгенерированным из кода XAML. Чтобы такое слияние классов во время компиляции произошло, класс MainPage определяется как частичный с модификатором partial. А через метод InitializeComponent() класс MainPage вызывает скомпилированный ранее код XAML, разбирает его и по нему строит графический интерфейс страницы.
Определим на станице MainPage.xaml какое-либо примитивное содержание, например, кнопку:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="HelloApp.MainPage"> <Button x:Name="button1" Text="Нажать!" Clicked="Button_Click" /> </ContentPage>
В данном случае определяется кнопка, которая занимает все пространство страницы MainPage.
Свойства элементов определяются в виде атрибутов, например, Text="Нажать!"
. События также определяются как атрибуты.
Например, с помощью атрибута Clicked устанавливается обработчик для события нажатия:
Clicked="Button_Click"
. И чтобы определить обработчик, перейдем в файл MainPage.xaml.cs и определим в классе MainPage
следующий метод:
public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); } private void Button_Click(object sender, EventArgs e) { button1.Text = "Нажато!!!"; } }
С помощью атрибута x:Name элементу назначается имя. При компиляции приложения будет создаваться приватная переменная с этим именем. Через это имя в файле отделенного кода C# мы сможем ссылать на этот элемент, точнее на объект, который представляет в файле кода данный элемент. В частности, здесь кнопке назначено имя "button1". Соответственно в файле кода мы можем обратиться к свойствам и методам кнопки через это имя. В итоге по нажатию на кнопку у нее изменится текст.