Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

// Для краткости код не показан.

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
:

<Button x:Name="btnMyButton" Content="Click Me!" Height="23" Width="140"

Click="btnMyButton_Click" />

Здесь свойство

Content
элемента
Button
устанавливается в простую строку
"Click Me!"
. Однако благодаря модели содержимого элементов управления WPF можно создать элемент
Button
со следующим сложным содержимым:

<Button x:Name="btnMyButton" Height="121" Width="156" Click="btnMyButton_Click">

<Button.Content>

<StackPanel Height="95" Width="128" Orientation="Vertical">

<Ellipse Fill="Red" Width="52" Height="45" Margin="5"/>

<Label Width="59" FontSize="20" Content="Click!" Height="36" />

</StackPanel>

</Button.Content>

</Button>

Вы можете также вспомнить, что непосредственным дочерним элементом производного от

ContentControl
класса является предполагаемое содержимое, а потому при указании сложного содержимого определять область
Button.Content
явно не требуется. Можно было бы написать такую разметку:

<Button x:Name="btnMyButton" Height="121" Width="156" Click="btnMyButton_Click">

<StackPanel Height="95" Width="128" Orientation="Vertical">

<Ellipse Fill="Red" Width="52" Height="45" Margin="5"/>

<Label Width="59" FontSize="20" Content="Click!" Height="36" />

</StackPanel>

</Button>

В

любом случае свойство
Content
кнопки устанавливается в элемент
StackPanel
со связанными элементами. Создавать сложное содержимое подобного рода можно также с применением визуального конструктора Visual Studio. После определения диспетчера компоновки для элемента управления содержимым его можно выбирать в визуальном конструкторе в качестве целевого компонента, на который будут перетаскиваться внутренние элементы управления. Каждый из них можно редактировать в окне Properties. Если окно Properties использовалось для обработки события
Click
элемента управления
Button
(как было показано в предшествующих объявлениях XAML), то IDE-среда сгенерирует пустой обработчик события, куда можно будет добавить специальный код, например:

private void btnMyButton_Click(object sender, RoutedEventArgs e)

{

MessageBox.Show("You clicked the button!");

}

Работа с окном Document Outline

В главе 24 вы узнали, что при проектировании элемента управления WPF со сложным содержимым удобно пользоваться окном Document Outline (Схема документа) в Visual Studio (открываемое через меню View?Other Windows (Вид?Другие окна)). Для создаваемого элемента Window отображается логическое дерево XAML, а щелчок на любом узле в дереве приводит к его автоматическому выбору в визуальном конструкторе и в редакторе XAML для редактирования.

В текущей версии Visual Studio окно Document Outline имеет несколько дополнительных средств, которые вы можете счесть полезными. Справа от любого узла находится значок, напоминающий глазное яблоко. Щелчок на нем позволяет скрывать или отображать элемент в визуальном конструкторе, что оказывается удобным, когда необходимо сосредоточить внимание на отдельном сегменте, подлежащем редактированию (следует отметить, что элемент будет сокрыт только на поверхности визуального конструктора, но не во время выполнения).

Справа от значка с глазным яблоком есть еще один значок, который позволяет блокировать элемент в визуальном конструкторе. Как и можно было догадаться, это удобно, когда нужно воспрепятствовать случайному изменению разметки XAML для заданного элемента вами или коллегами по разработке. На самом деле блокировка элемента делает его допускающим только чтение на этапе проектирования (но вы можете изменять состояние объекта во время выполнения).

Управление компоновкой содержимого с использованием панелей

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

По умолчанию новый WPF-элемент

Window
, созданный с помощью Visual Studio, будет применять диспетчер компоновки типа
Grid
(вскоре мы опишем его более подробно). Тем не менее, пока что рассмотрим элемент
Window
без каких-либо объявленных диспетчеров компоновки:

<Window x:Class="MyWPFApp.MainWindow"

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

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

Поделиться с друзьями: