Файлы отделенного кода

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

По умолчанию вместе с файлом MainPage.xaml Visual Studio также создает файл отделенного кода (code-behind) MainPage.xaml.cs, который содержит логику на C#, связанную с файлом MainPage.xaml. Файлы XAML позволяют нам определить визуальный интерфейс, но для создания логики, например, для определения обработчиков событий элементов управления, все равно придется воспользоваться кодом C#.

Если мы посмотрим на файл MainPage.xaml.cs, то увидим, что он определяет частичный класс MainPage:

public sealed partial class MainPage : Page

С помощью атрибута x:Class объект Page в XAML ассоциируется с частичным классом, определенным в MainPage.xaml.cs. Затем при комплияции компилятор соединяет оба файла в один класс.

Класс MainPage по умолчанию практически ничего не делает, кроме начальной инициализации компонентов:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace HelloApp
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            this.NavigationCacheMode = NavigationCacheMode.Required;
        }
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
      
        }
    }
}

Через вызываемый в конструкторе метод InitializeComponent() класс MainPage получает скомпилированный ранее код XAML, разбирает его и по нему строит графический интерфейс страницы.

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

В приложении часто требуется обратиться к какому-нибудь элементу управления. Для этого надо установить у элемента в XAML атрибут x:Name.

Еще одной точкой взаимодействия между xaml и C# являются события. С помощью атрибутов в XAML мы можем задать события, которые будут связанны с обработчиками в коде C#.

Например, определим в XAML кнопку с двумя текстовыми полями:

<Page
    x:Class="HelloApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:HelloApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
   <Grid>
        <TextBox x:Name="textBox1" Width="200" PlaceholderText="Введите сумму" />
        <Button x:Name="button1" Content="Считать" Width="150" VerticalAlignment="Top" 
                Margin="140 60 0 0" Click="button1_Click"/>
        <TextBlock x:Name="textBlock1" Width="150" Height="40" FontSize="24"
                   VerticalAlignment="Top" Margin="40 120 20 0" />
    </Grid>
</Page>

И теперь мы можем добавить в файл отделенного кода метод button1_Click - обработчик события Click:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace HelloApp
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            this.NavigationCacheMode = NavigationCacheMode.Required;
        }
		
		protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            double capital;
            if(Double.TryParse(textBox1.Text,out capital))
            {
                 capital+=capital * 0.12;
                 textBlock1.Text = capital.ToString() + " долларов";
            }
        }
    }
}

Определив имена элементов в XAML, затем мы можем к ним обращаться в коде c#: string text = textBox1.Text.

Создание элементов

Хотя XAML позволяет довольно просто создавать элементы, но мы можем также определять элементы динамически в коде c#. Например, пусть элемент Grid в XAML имеет следующее имя:

<Grid x:Name="grid1">
</Grid>

Теперь в файле отделенного кода в конструкторе MainPage можно добавить в этот грид разные элементы:

public MainPage()
{
    this.InitializeComponent();

    this.NavigationCacheMode = NavigationCacheMode.Required;

    Button button2 = new Button();
    button2.Width = 100;
    button2.Height = 30;
    button2.Content = "Кнопка2";
    grid1.Children.Add(button2);
}

Это аналогично тому, как если бы создали ту же кнопку через xaml:

<Grid x:Name="grid1">
	<Button x:Name="button2" Content="Кнопка" Width="100" Height="30" />
</Grid>
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850