Модификация приложения Silverlight : первые шаги и полноэкранный режим
Первым делом рассмотрим начальные возможности Silverlight. Как уже стало ясно, основу приложения в текущем проекте составит приложение WPF. О том, что такое WPF и как с ним работать было рассказано в предыдущих лабораторных работах практикума.
Основное отличие данного WPF и «чистого» WPF-приложения состоит в изменённом и расширенном коде файла App . xaml . cs для главного файла, а также наличие файла AppManifest . xml в папке Properties:
Двойным нажатием открываем Конструктор для главной редактируемой страницы проекта MainPage . xaml. Код XAML должен быть изначально таким:
<UserControl x:Class="LWP17Silverlight.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White"></Grid>
</UserControl>
Ищем:
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400">
Данный код означает, что размеры страницы свободные и не фиксированные для элементов и нужны лишь для изначального дизайна (после запуска приложения, элементы не будут ограничены размерами изначальной страницы). Для переключения к фиксированным размерам можно нажать в конструкторе на кнопку:
Либо впишем:
mc:Ignorable="d" Height="300" Width="400">
Итак, поменяем эту строчку следующим кодом (изменим размеры для дизайна):
|
|
mc:Ignorable="d" d:DesignHeight="480" d:DesignWidth="640">
Теперь инициализируем событие нажатия любой клавиши в фокусе страницы. Для этого на панель Свойства и перейдём в вкладку События. Двойным нажатием по событию KeyDown инициализируем метод UserControl _ KeyDown (где UserControl — имя формы):
Код XAML:
mc:Ignorable="d" d:Designd:DesignHeight="480" KeyDown="UserControl_KeyDown">
Отредактируем сетку Grid. Для этого найдём в XAML-коде конструктора код:
<Grid x:Name="LayoutRoot" Background="White">
Мышкой жмём на слово «Grid». На панели свойство ищем свойство Background (группа свойств Кисти):
Вписываем Azure либо выбираем понравившийся цвет. Далее редактируем свойство RowDefinitions, жмём «...»:
В окне Редактор коллекции: RowDefinition добавляем пять элементов RowDefinition, свойство Height первого и последнего ставим как «2*»:
Рис. 3. 1. Добавляем разделители на строки для элемента сетки
Также поступаем для столбцов. Открываем свойство для элемента Grid: ColumnDefinitons. Добавляем два новых ColumnDefinition в редакторе коллекции. Свойство Width второго вписываем как «2*». Итоговый элемент Grid должен выглядеть так:
Рис. 3. 2. Завершённый элемент Grid, разделённый на строки и столбцы
|
|
В первую клетку сетки (строка: 0, столбец: 0) вставляем в панели элементов простой TextBlock ( ):
Выделим XAML-код добавленного элемента и заменим его следующим кодом:
<TextBlock HorizontalAlignment="Stretch" Name="textBlock1" VerticalAlignment="Stretch" TextAlignment="Center">
Нажмите кнопку "Полноэкранный режим" для перехода в полноэкранный режим.
<LineBreak/>
Нажмите кнопку "Обычный режим" для перехода в режим окна браузера.
<LineBreak/>
<LineBreak/>
В обычном режиме опробуйте нажатие клавиш на клавиатуре в фокусе окна браузера.
<LineBreak/>
Нажатая клавиша будет отображена на на странице.
<LineBreak/>
<LineBreak/>
В полноэкранном режим будут работать только следующие клавиши:
<LineBreak/>
Стрелки клавиатуры, пробел, Tab, Page Up, Page down, Home, End и Enter.</TextBlock>
Данный помещает текст не внутрь свойства Text, а в границы открывающего и закрывающего тэгов < TextBlock ...>Текст</ TextBlock >. Размещённый текст располагается по центру в элементе. Сам элемент растягивается до границ ячейки сетки.
В ячейку ниже [1, 0] добавим кнопку (Button), и сразу же замени код кнопки следующим XAML-кодом:
<Button Content="Полноэкранный режим" Grid.Row="1" Grid.Column="0" x:Name="button1" Height="23" VerticalAlignment="Center" HorizontalAlignment="Center" Click="button1_Click" IsTabStop="False" />
|
|
Замену в этом случае можно не проводить. Свойства Grid . Row «1» и Grid . Column «0» определяются в момент размещения элемента внутри сетки. Остальные свойства кнопки: Width установлено в «150», а в свойствах VerticalAligment и HorizontalAligment выбирано Center. IsTabStop: галочка снята.
В ячейки [2, 0] и [3, 0] вставляем ещё два TextBlock со следующим XAML-кодом:
<TextBlock x:Name="textBlock2" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextAlignment="Center" FontSize="26" />
<TextBlock x:Name="textBlock3" Grid.Row="3" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextAlignment="Center" FontSize="36" />
Двойным нажатием по единственной кнопке в конструкторе инициализируем событие Click. Код такой:
private void button1_Click(object sender, RoutedEventArgs e)
{
if (!App.Current.Host.Content.IsFullScreen)
button1.Content = "Оконный режим";
else button1.Content = "Полноэкранный режим";
// Переключение в полноэкранный или оконный режимы
App.Current.Host.Content.IsFullScreen = !App.Current.Host.Content.IsFullScreen;
}
Код события нажатия клавиши KeyDown меняем так:
|
|
private void UserControl_KeyDown(object sender, KeyEventArgs e)
{
// Перехватываем нажатие клавиши в textBlock3
this.textBlock3.Text = "Нажата кнопка: " + e.Key.ToString();
}
В коде файла MainPage.xaml.cs находим:
public MainPage()
{
InitializeComponent();
}
Изменяем на:
public MainPage()
{
InitializeComponent();
// Подключаем событие Loaded чтобы подключить события на этапе загрузки страницы
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
// Подписываемся на события из SilverlightHost и вызываем соответствующий метод при срабатывании
App.Current.Host.Content.FullScreenChanged += new EventHandler(Content_FullScreenChanged); // Событие состояния страницы: окнонный/полноэкранный
App.Current.Host.Content.Resized += new EventHandler(Content_Resized); // Событие изменения размеров окна
}
void Content_Resized(object sender, EventArgs e)
{
// Когда изменяются размеры страницы, обновляем данные об этом
// вызывом функцию вывода размеров Silverlight плагина
RefreshTextBlockShowSize();
}
void Content_FullScreenChanged(object sender, EventArgs e)
{
// Когда изменяются состояния страницы (оконный/полноэкранный), обновляем данные об этом
// вызывом функцию вывода размеров Silverlight плагина
RefreshTextBlockShowSize();
}
private void RefreshTextBlockShowSize()
{
// Показывает размеры плагина Silverlight plug-in в textBlock2
this.textBlock2.Text = string.Format("Размер страницы: {0}*{1}",
App.Current.Host.Content.ActualWidth,
App.Current.Host.Content.ActualHeight);
}
Компилируем, проверяем работоспособность. Следуя инструкции, написанной на странице, выполняем различные действия, и наблюдает за результатом.
Рис. 3. 3. Результат работы приложения Silverlight: нажата клавиша «пробел»
Рис. 3. 4. Результат работы приложения Silverlight: включен полноэкранный режим страницы
Дата добавления: 2019-09-13; просмотров: 188; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!