Основные сборки WPF

PresentationCore.dll Фундамент уровня графического интерфейса в WPF, в том числе поддержка интерфейса WPF Ink API (для перьевого ввода), несколько примитивов анимации, множество типов визуализации графики
PresentationFoundation.dll · Большинство элементов управления WPF, классы Application и Window, поддержка интерактивных двухмерных геометрий. · Базовая функциональность для чтения и записи документов XAML во время выполнения
System.Xaml.dll Расширенное взаимодействие с документами XAML. Предоставляет полный контроль над XAML во время выполнения
WindowsBase.dll Эта сборка определяет основные типы, составляющие инфраструктуру API-интерфейса WPF. Здесь находятся типы потоков WPF, типы безопасности, различные преобразователи типов и прочие программные примитивы

 

Построение приложения WPF без XAML

Учитывая всю функциональность, предлагаемую родительскими классами типа Window, представить окно в приложении можно, либо напрямую создав объект Window, либо указав этот класс в качестве родительского для строго типизированного наследника. В следующем примере рассматриваются оба подхода. Хотя большинство приложений WPF используют XAML, так поступать вовсе не обязательно. Все, что может быть выражено на XAML, также можно выразить в коде и (по большей части) наоборот. При желании можно построить полный проект WPF, используя лежащую в основе объектную модель и процедурный код.

using System;

using System.Windows;

using System.Windows.Controls;

namespace WpfAppAllCode

{

// Класс, представляющий главное окно приложения

class MainWindow : Window

{

public MainWindow(string windowTitle, int height, int width)

{

this.Title = windowTitle;

this.WindowStartupLocation = WindowStartupLocation.CenterScreen;

this.Height = height;

this.Width = width;

}

}

 

// Класс, представляющий программу

class Program : Application

{

[STAThread]

static void Main(string[] args)

{

Program app = new Program();

 

// Задание обработчиков событий Startup и Exit

app.Startup += AppStartUp;

app.Exit += AppExit;

 

app.Run(); // Запускает приложение

}

 

static void AppExit(object sender, ExitEventArgs e)

{

MessageBox.Show("App has exited");

}

static void AppStartUp(object sender, StartupEventArgs e)

{

// Создать объект Window и установить некоторые базовые свойства.

MainWindow mainWindow = new MainWindow("Simple WPF App!", 200, 300);

mainWindow.Show();

}

}

}

 

Построение приложения WPF с использованием только XAML

Типичное WPF-приложение не состоит исключительно из кода, как в первом примере. Файлы кода С# дополняются связанным исходным файлом XAML, и вместе они представляют сущность конкретного Window или Application.

Расширяемый язык разметки приложений (Extensible Application Markup Language — XAML) — это основанная на XML грамматика, позволяющая определять состояние (и до некоторой степени функциональность) дерева объектов .NET через разметку.

Учитывая тот факт, что XAML является просто декларативным способом определения состояния объекта, элементы управления WPF можно определять через разметку либо в процедурном коде. Например, следующий код XAML:

<Button Name="btnClickMe" Height="40м" Width="100" Content="Click Me"/>

может быть представлен программно так:

Button btnClickMe = new Button();

btnClickMe.Height = 40;

btnClickMe.Width = 100;

btnClickMe.Content = "Click Me";

 

Пример реализации окна программы при помощи XAML:

<!-- Определение класса Window -->

<Window x:Class ="SimpleXamlApp.MainWindow"

Xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"

Title ="A Window built using 100% XAML"

Height ="200"

Width ="300"

WindowStartupLocation ="CenterScreen">

 

<!-- Это окно имеет в качестве содержимого единственную кнопку -->

<Button x:Name="btnExitApp" Width="133"

Height="24" Content = "Close Window" Click ="btnExitApp_Clicked" />

 

<!-- Реализация обработчика события кнопки Click -->

<x:Code>

<![CDATA[

private void btnExitApp_Clicked (object sender, RoutedEventArgs e)

{

this.Close ();

}

]]>

</x:Code>

</Window>

 

Пример C# обработчика события для контрола, объявленного в XAML (связь кода и XAML):

Объявление контрола:

<Button Height="23"

HorizontalAlignment="Left"

Margin="20,26,0,0"

Name="button1"

VerticalAlignment="Top"

Width="75"

Content="Click here"

Click="button1_Click"/>

 

Объявление обработчика в коде:

public partial class Window1 : Window

{

...

private void button1_Click(object sender, RoutedEventArgs e)

{

// ...

}

}


 

 

39. Техника визуальной разработки приложений в WPF+C#.