Взаимодействие XAML и C#

Последнее обновление: 08.01.2021

При добавлении новой страницы XAML в проект также одновременно добавляется файл кода C#. Так, при создании проекта в него по умолчанию добавляется файл с графическим интерфейсов в XAML - MainPage.xaml и файл MainPage.xaml.cs, где, как предполагается, должна находится логика приложения, связанная с разметкой из файла XAML.

Xaml в Xamarin в Visual Studio 2019

Файлы 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, разбирает его и по нему строит графический интерфейс страницы.

Взаимодействие с кодом c#

Определим на станице 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". Соответственно в файле кода мы можем обратиться к свойствам и методам кнопки через это имя. В итоге по нажатию на кнопку у нее изменится текст.

Взаимодействие кода C# и XAML в Xamarin Forms
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850