![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
До сих пор все атрибуты, которые вы видели, отображались на свойства. Однако атрибуты также могут быть использованы для прикрепления обработчиков событий. Синтаксис при этом выглядит следующим образом:
ИмяСобытия=="ИмяМетодаОбработчикаСобытий"
Например, элемент управления типа Button предоставляет событие Click. Тогда можно
прикрепить обработчик событий следующим образом:
<Button Click="cmdAnswer_Click">
Это предполагает наличие метода по имени cmdAnswer_Click в классе отделенного кода. Обработчик событий должен иметь правильную сигнатуру. То есть он должен соответствовать делегату для события Click. Например:
private void cmdAnswer_Click(object sender, RoutedEventArgs e)
{
this.Cursor = Cursors.Wait;
// Значительная задержка...
System.Threading.Thread.Sleep(TimeSpan.FromSeconds (3));
AnswerGenerator generator = new AnswerGenerator ();
txtAnswer.Text = generator.GetRandomAnswer(txtQuestion.Text);
this.Cursor = null;
}
По сигнатуре этого обработчика событий можно легко заметить, что модель событий в WPF несколько отличается от ранних версий.NET. Теперь она поддерживает новую модель, основанную на маршрутизации событий.
Часто, для одного и того же элемента управления, используются атрибуты для установки его свойств и прикрепления соответствующих обработчиков событий. WPF всегда делает эту работу в следующей последовательности: сначала устанавливается свойство Name (если оно есть), а затем прикрепляются любые обработчики событий и, наконец, устанавливаются свойства. Это означает, что любые обработчики событий, реагирующие на изменения свойств, будут запущены при первоначальной установке свойства.
Visual Studio облегчает этот процесс путем предоставления специальных средств IntelliSense при добавлении атрибут для обработчика события. Например, как только вводится символ равенства после набора Click= в элементе < Button >, то сразу же отображается раскрывающийся список со всеми подходящими обработчиками событий в вашем классе отделенного кода. Если вам нужно создать новый обработчик для данного события, просто выбирается пункт <Новый обработчик событий> (<New Event Handler>), расположенный в вершине этого списка.
1.5.11. Полный пример автоответчика
Теперь, когда вы познакомились с основами XAML. вы знаете достаточно, чтобы пройтись по определению окна, показанного на рис. 2.1. Вот полный код разметки XAML:
<Window x:Class="EightBall.Windowl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Eight Ball Answer" Height="300" Width="300" >
<Grid Name="gridl">
<Grid.RowDefinitions>
<RowDefinition Height="34" />
<RowDefinition Height="98" />
<RowDefinition Height="130" />
</Grid.RowDefinitions>
<TextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
Margin="10,10,13,10" Name="txtQuestion"
TextWrapping="Wrap" FontFamily="Verdana" FontSize="24" Grid.Row="0">
[Place question here.]
</TextBox>
<Button VerticalAlignment="Top" HorizontalAlignment="Left"
Margin "10,10,10,20 " Width="127" Height="23" Name="cmdAnswer"
Click="cmdAnswer_Click" Grid.Row="l">
Ask the Eight Ball
</Button>
<TextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
Margin="10,10,13,10" Name="txtAnswer" TextWrapping=" Wrap"
IsReadOnly="True" FontFamily=Verdana" FontSize="24" Foreground="Green"
Grid.Row="2">
[Answer will appear here.]
</TextBox>
<Grid.Background>
<LinearGradientBrush>
<GradientStop Offset="0.00" Color="Red" />
<GradientStop Offset="0.50" Color="Indigo" />
<GradientStop Offset="1.00" Color="Violet" />
</LinearGradientBrush>
</Grid.Background>
</Grid>
</Window>
Совершенно ясно, что писать вручную тексты на языке XAML для пользовательского интерфейса достаточно утомительно. Но иногда это бывает необходимо, например, когда в дизайнере трудно отредактировать код XAML так, как это необходимо или он вообще не позволяет этого сделать необходимые изменения.
1.5.12. Загрузка и компиляция XAML
Как вам стало известно, XAML и WPF - это две разные, хотя и взаимодополняющие технологии. В результате вполне возможно создать приложение WPF, которое может не использовать слабой части XAML.
Существуют три разных стиля кодирования, которые вы можете использовать для создания приложения WPF.
• Только программный код на языке С #. Это традиционный подход, используемый в Visual Studio для создания приложений Windows Forms. Он генерирует пользовательский интерфейс в виде соответствующих операторов кода.
• Программный код и не компилированная разметка (XAML). Это специализированный подход, который имеет смысл в определенных ситуациях, когда необходимы высокодинамичные пользовательские интерфейсы. При этом часть пользовательского интерфейса загружается из файла XAML во время выполнения с помощью класса System.Windows.Markup.XamlReader
• Программный код и компилированная разметка (BAML). Это предпочтительный подход для WPF, поддерживаемый в Visual Studio. В этом случае для каждого окна создается шаблон XAML, который компилируется в BAML. После чего результат встраивается в конечную сборку. Во время выполнения скомпилированный BAML извлекается и используется для регенерации пользовательского интерфейса.
Дата публикования: 2015-10-09; Прочитано: 289 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!