Пространство имен System.Windows.Ink
из сборки PresentationCore.dll
содержит разнообразные поддерживающие типы Ink API (например, Stroke
и StrokeCollection
). Однако большинство элементов управления Ink API (вроде InkCanvas
и InkPresenter
) упакованы вместе с общими элементами управления WPF в пространстве имен System.Windows.Controls
внутри сборки PresentationFramework.dll
. Мы будем работать с интерфейсом Ink API позже в главе.
Элементы управления для работы с документами WPF
Вдобавок инфраструктура WPF предоставляет элементы управления для расширенной обработки документов, позволяя строить приложения, которые включают функциональность в стиле Adobe PDF. С применением типов из пространства имен System.Windows.Documents
(также находящегося в сборке PresentationFramework.dll
) можно создавать готовые к печати документы, которые поддерживают масштабирование, поиск, пользовательские аннотации ("клейкие" заметки) и другие развитые средства работы с текстом.
Тем не менее, "за кулисами" элементы управления документов не используют API-интерфейсы Adobe PDF, а взамен работают с API-интерфейсом XML Paper Specification (XPS). Конечные пользователи никакой разницы не заметят, потому что документы PDF и XPS имеют практически идентичный вид и поведение. В действительности доступно множество бесплатных утилит, которые позволяют выполнять преобразования между указанными двумя файловыми форматами на лету. Из-за ограничений по объему такие элементы управления в текущем издании не рассматриваются.
Общие диалоговые окна WPF
Инфраструктура WPF также предлагает несколько общих диалоговых окон, таких как OpenFileDialog
и SaveFileDialog
, которые определены в пространстве имен Microsoft.Win32
внутри сборки PresentationFramework.dll
. Работа с любым из указанных диалоговых окон сводится к созданию объекта и вызову метода ShowDialog()
:
using Microsoft.Win32;
// Для краткости код не показан.
private void btnShowDlg_Click(object sender, RoutedEventArgs e)
{
// Отобразить диалоговое окно сохранения файла.
SaveFileDialog saveDlg = new SaveFileDialog();
saveDlg.ShowDialog();
}
Как и можно было ожидать, в этих классах поддерживаются разнообразные члены, которые позволяют устанавливать фильтры файлов и пути к каталогам, а также получать доступ к выбранным пользователем файлам. Некоторые диалоговые окна применяются в последующих примерах; кроме того, будет показано, как строить специальные диалоговые окна для получения пользовательского ввода.
Краткий обзор визуального конструктора WPF в Visual Studio
Большинство стандартных элементов управления WPF упаковано в пространство имен System.Windows.Controls
внутри сборки PresentationFramework.dll
. При построении приложения WPF в Visual Studio множество общих элементов управления находится в панели инструментов при условии, что активным окном является визуальный конструктор WPF.
Подобно другим инфраструктурам для построения пользовательских интерфейсов в Visual Studio такие элементы управления можно перетаскивать на поверхность визуального конструктора WPF и конфигурировать их в окне Properties (Свойства), как было показано в главе 24. Хотя Visual Studio сгенерирует приличный объем разметки XAML автоматически, нет ничего необычного в том, чтобы затем редактировать разметку вручную. Давайте рассмотрим основы.
Работа с элементами управления WPF в Visual Studio
Вы можете вспомнить из главы 24, что после помещения элемента управления WPF на поверхность визуального конструктора Visual Studio в окне Properties (или прямо в разметке XAML) необходимо установить свойство x:Name
, т.к. это позволяет обращаться к объекту в связанном файле кода С#. Кроме того, на вкладке Events (События) окна Properties можно генерировать обработчики событий для выбранного элемента управления. Таким образом, с помощью Visual Studio можно было бы сгенерировать следующую разметку для простого элемента управления Button
:
Click="btnMyButton_Click" />
Здесь свойство Content
элемента Button
устанавливается в простую строку "Click Me!"
. Однако благодаря модели содержимого элементов управления WPF можно создать элемент Button
со следующим сложным содержимым: