#009 Мощь WindowsForms и WPF
В настоящий момент большое число пользователей обеспокоено возможностями библиотеки .NET 3.0 с точки зрения функциональности кода. Да, мы можем создавать великолепные интерфейсы, но что делать с функциональностью? Не секрет, что наборы классов .NET 3.0 в некоторых случаях облегчают работу программиста, а в некоторых - затрудняют. Многие пользователи считают, что последних случаев больше. Именно поэтому я посвящаю эту и следующие две статьи вопросам взаимодействия .NET 2.0 и .NET 3.0 . Я постараюсь разрушить эти предубеждения у пользователей сайта www.thevista.ru . Актуально ли это на настоящий момент? Да - до сих пор на форумах msdn регулярно появляются вопросы типа "А где же мощь WindowsForms?" (читай .NET 2.0).
В нашем сегодняшнем приложении на базе WPF мы применим код из .NET 2.0 . Вы должны уяснить, что .NET 3.0 полностью базируется на 2-й версии классов и нет практически никаких ограничений на их использование. Именно поэтому это возможно.
Создадим новое приложение типа WinFX Windows Application и назовем его "MyInfoWindow". Я хочу 1) создать некое информационное окно 2) которое будет появляться в нижнем правом углу экрана. Для реализации первого пункта воспользуемся WPF. Отредактируйте XAML-код вашего окна:
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Информация" Height="100" Width="300"
Background ="Gold"
>
<Grid>
<Label FontFamily ="Arial" FontSize ="15" Foreground ="White"
Content ="Читайте новости на www.thevista.ru"
HorizontalAlignment ="Center" VerticalAlignment ="Center"
Name="MyText" Width ="260">
<Label.Triggers>
<EventTrigger RoutedEvent="Label.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyText"
Storyboard.TargetProperty="(Label.Width)"
From="0" To="260" Duration="0:0:2"
AutoReverse="False"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Label.Triggers>
</Label>
</Grid>
</Window>
;/Window>[/code]
Все что мы сделали, это немного изменили свойства окна, добавили надпись типа Label и применили к ней несложную анимацию - мы все-таки пишем на WPF! Все примененные методы мы уже неоднократно обсуждали в предыдущих статьях, поэтому я оставлю их без комментариев.
Если бы мы писали обычное .NET 2.0 приложение, то для реализации второго пункта плана мы бы воспользовались таким кодом, размещенным например в методе Form_Load:
[code]Dim desktop As Screen = Screen.PrimaryScreen
Location = New Point(desktop.WorkingArea.Width - Width - 10, _
desktop.WorkingArea.Height - Height - 10)[/code]
Как применить этот код в нашем приложении? Очень просто. Скопируйте и вставьте его в конструктор NEW() нашей формы, вот так:
[code]Public Sub New()
InitializeComponent()
Dim desktop As Screen = Screen.PrimaryScreen
Location = New Point(desktop.WorkingArea.Width - Width - 10, _
desktop.WorkingArea.Height - Height - 10)
End Sub[/code]
В данный момент, вы не сможете запустить программу, так как мы не подключили необходимые библиотеки. Чтобы это сделать, воспользуйтесь командой меню Project - > MyInfoMenu Properties в окне Visual Studio 2005, чтобы отредактировать свойства проекта. Перейдите на вкладку References:
Нажмите кнопку Add чтобы добавить ссылки на нужные нам библиотеки System.Windows.Forms.dll и System.Drawing.dll
Теперь добавьте ссылки на эти библиотеки перед описанием класса окна:
[code]Imports System.Windows.Forms 'Для работы Screen в конструкторе
Imports System.Drawing 'Для работы desktop.WorkingArea
Partial Public Class Window1[/code]
Все, что осталось сделать это немного изменить код конструктора NEW () чтобы он соответствовал нужным требованиям. Например мы можем изменить местоположение окна WPF только установив его свойству WindowStartupLocation значение Manual
Наш обновленный конструктор выглядит так:
[code]Public Sub New()
InitializeComponent()
Me.WindowStartupLocation = Windows.WindowStartupLocation.Manual
Dim desktop As Screen = Screen.PrimaryScreen
Dim location As Point = _
New Point(desktop.WorkingArea.Width - Width - 10, _
desktop.WorkingArea.Height - Height - 10)
Me.Top = location.Y
Me.Left = location.X
End Sub[/code]
Запускаем приложение и смотрим на результат:
Окно расположено в правом нижнем углу экрана!
Мы воспользовались классами .NET 2.0 чтобы выполнить перемещение окна!
В конце статьи традиционный полный листинг программы.
XAML-листинг:
[code]<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Информация" Height="100" Width="300"
Background ="Gold"
>
<Grid>
<Label FontFamily ="Arial" FontSize ="15" Foreground ="White"
Content ="Читайте новости на www.thevista.ru"
HorizontalAlignment ="Center" VerticalAlignment ="Center"
Name="MyText" Width ="260">
<Label.Triggers>
<EventTrigger RoutedEvent="Label.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="MyText"
Storyboard.TargetProperty="(Label.Width)"
From="0" To="260" Duration="0:0:2"
AutoReverse="False"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Label.Triggers>
</Label>
</Grid>
</Window>[/code]
VB-листинг:
[code]Imports System.Windows.Forms 'Для работы Screen в конструкторе
Imports System.Drawing 'Для работы desktop.WorkingArea
Partial Public Class Window1
Inherits Window
Public Sub New()
InitializeComponent()
Me.WindowStartupLocation = Windows.WindowStartupLocation.Manual
Dim desktop As Screen = Screen.PrimaryScreen
Dim location As Point = _
New Point(desktop.WorkingArea.Width - Width - 10, _
desktop.WorkingArea.Height - Height - 10)
Me.Top = location.Y
Me.Left = location.X
End Sub
End Class[/code]
Июль, 2006
Комментарии
По теме
- Создаем контекстно-зависимое WPF-приложение
- #024 – Знакомство с WPF/E
- #023 – Введение в WPF, reloaded…
- #022 Введение в Microsoft Interactive Designer RC1
- #021 Применение 3D в WPF - Часть 2
- #020 Применение 3D в WPF - Часть 1
- #019 Введение в возможности 3D на WPF
- #018 Размещение контрола NET 2.0 на форме WPF
- #017 Первое Web-приложение / Подробнее о Grid / Элемент Frame
- #016 EXE, XBAP, XAML? - Все равно!