02_Березина_Application_Window

advertisement
Классы Windows Presentation Foundation
System.Object
DispatcherObject
Application
DependencyObject
NavigationService
FrameworkTemplate
Visual
ContentElement
UIElement
FrameworkContentElement
Style
FrameworkElement
Page
Shape
TextBlock
ContentControl
Panel
Control
RangeBase
TextBoxBase
Frame
Slider
TextBox
Window
ProgressBar
RichTextBox
NavigationWindow
ButtonBase
Grid
ItemsControl
MenuBase
Menu
ContextMenu
HeaderedItemsControl
MenuItem
Button
Toolbar
Selector
RepeatButton
TabControl
ToggleButton
CheckBox
Canvas
RadioButton
ListBox
ListView
TreeView
ComboBox
Класс Application
 Класс System.Windows.AppIication инкапсулирует приложение в целом.
 В приложении можно создать только один объект AppIication.
 Фрагмент кода в файле App.g.cs, который сгенерирован Visual Studio 2008:
namespace Wpf_Sample1 {
public partial class App : System.Windows.Application
{ public void InitializeComponent()
{ this.StartupUri = new System.Uri("Window1.xaml", System.UriKind.Relative);
}
/// Application Entry Point.
public static void Main()
{
Wpf_Sample1.App app = new Wpf_Sample1.App();
app.InitializeComponent();
app.Run();
}
}
}
 Mетод Run класса AppIication запускает диспетчер, управляющий отправкой событий.
 Метод Run возвращает управление при вызове метода Shutdown (явном или WPFвызове).
 Явный или неявный вызов метода Shutdown управляется свойством
public ShutdownMode ShutdownMode { get; set; }
 Перечисление ShutdownMode имеет значения OnLastWindowClose, OnMainWindowClose
и OnExplicitShutdown.
Свойства Current и Properties класса AppIication
 Статическое свойство Current дает доступ к объекту AppIication в любом месте
программы:
public static Application Current { get; }
 Экземплярное свойство Properties дает доступ к коллекции, реализующей интерфейс
System.Collections.IDictionary, которая поддерживается объектом AppIication .
public IDictionary Properties { get; }
 Свойства Properties и Current дают доступ к элементам коллекции в любом месте
приложения и на протяжении всей жизни приложения. В коллекцию можно добавить
элемент любого типа, связав с ним ключ также любого типа.
Класс Window
 Класс System.Windows.Window используется для создания визуального
элемента верхнего уровня и является контейнером для других элементов
управления.
 В процессе создания окна в следующем порядке возбуждаются события:
• Initialized
• Activated
• Loaded
• ContentRendered
 При закрытии окна события поступают в следующем порядке:
• Closing
• Unloaded
• Closed
События Activated и Deactivated возникают при переключении на другие окна.
Событие Closing
 Событие Closing происходит после вызова метода Close() - явного или неявного. В
обработчике этого события можно отменить закрытие окна.
 Событие Closing имеет тип CancelEventHandler
public delegate void CancelEventHandler( Object sender, CancelEventArgs e );
 В классе System.ComponentModel.CancelEventArgs определено свойство Cancel, которое
дает возможность отказаться от закрытия окна.
public bool Cancel { get; set; }
 В следующем примере окно закрывается только при выборе кнопки “Да” в окне
сообщений MessageBox.
private void Window_Closing (object sender, System.ComponentModel.CancelEventArgs e)
{
MessageBoxResult res = MessageBox.Show("Закрыть окно?", "", MessageBoxButton.YesNo);
if (res == MessageBoxResult.No) e.Cancel = true;
}
 Обработчик для события Closing указан в разметке:
<Window x:Class="Wpf_Sample1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300" Closing="Window_Closing">
</Window>
Окно сообщений. Класс System.Windows.MessageBox
 Для вывода сообщений и организации простейшего взаимодействия с пользователем
обычно используется статический метод Show класса System.Windows.MessageBox.
 Класс System.Windows.MessageBox является непосредственным потомком класса
System.Object и содержит только один собственный метод Show.
 Открытый статический метод Show имеет 12 перегрузок.
public static MessageBoxResult Show ( string messageBoxText );
public static MessageBoxResult Show ( string messageBoxText, string caption );
public static MessageBoxResult Show ( string messageBoxText, string caption,
MessageBoxButton button );
public static MessageBoxResult Show ( Window owner, string messageBoxText,
string caption, MessageBoxButton button,
MessageBoxImage icon,
MessageBoxResult defaultResult,
MessageBoxOptions options );
 Замечание: В Windows Forms есть свой класс MessageBox для окна сообщений,
который определен в пространстве имен System.Windows.Forms. В этом же пространстве
имен определены перечисления для класса.
Перечисления для класса MessageBox
 Перечисление System.Windows.MessageBoxResult содержит информацию о том, какую
кнопку нажал пользователь. Значения перечисления
Ok
Yes
Cancel
No
None
 Перечисление System.Windows.MessageBoxButtons определяет набор кнопок в окне
сообщений. Значения перечисления
Ok
OkCancel
YesNo
YesNoCancel
 Перечисление MessageBoxImage определяет одну из готовых иконок в окне сообщений,
например, MessageBoxImage.Error.
 Перечисление MessageBoxOptions определяет дополнительные настройки окна
сообщений.
Диалоги
 В WPF для диалогов пользователя используется класс System.Windows.Window.
Диалоги создаются с помощью методов :
public void Show();
public Nullable<bool> ShowDialog();
ShowDialog
Создает модальный диалог. После вызова ShowDialog следующий
оператор не выполняется пока не произойдет выход из метода.
Пока не закрыт модальный диалог, окно-владелец не принимает ввод с
клавиатуры и сообщения мыши.
Show
Создает немодальное окно и инициирует в нем событие Loaded, после
чего сразу же происходит выход из метода. Диалог < Find and Replace> в
среде VisualStudio работает как немодальный диалог.
Отношение подчиненный-владелец
 Можно установить отношение подчиненный-владелец между окнами, присвоив
свойству Owner окна ссылку на окно-владелец (owner).
public Window Owner { get; set; }
 Подчиненное окно никогда не скрывается за окном-владельцем (свойство, необходимое
для окон “Find-Replace”).
 Подчиненное окно минимизируется (сворачивается) и закрывается одновременно с
окном-владельцем.
 Окно-владелец может получить доступ к подчиненным(собственным) окнам через
свойство
public WindowCollection OwnedWindows { get; };
public sealed class WindowCollection : ICollection, IEnumerable
 Окно, открытое вызовом метода Show, не имеет автоматической связи с окном, его
открывшим. Если необходимо установить эту связь, надо присвоить значение свойству
Owner.
Классы OpenFileDialog и SaveFileDialog
System.Object
Microsoft.Win32.CommonDialog
Microsoft.Win32.FileDialog
Microsoft.Win32.OpenFileDialog
Microsoft.Win32.SaveFileDialog
 Классы используются для создания стандартных
диалогов для выбора или ввода имени файла.
Диалоги дают возможность навигации по файловой
системе.
 Диалоги создаются только как модальные при
вызове метода ShowDialog(). После того, как диалог
закрыт, имя выбранного пользователем файла
доступно через свойства объекта класса
OpenFileDialog ( SaveFileDialog).
 Определенные в классах OpenFileDialog и
SaveFileDialog свойства дают возможность немного
изменить набор элементов и функциональность
стандартных диалогов.
public virtual Nullable<bool> ShowDialog();
public Nullable<bool> ShowDialog( Window owner );
Некоторые открытые свойства класса FileDialog
string FileName
{get; set;}
Полное имя файла, выбранное или введенное
пользователем. Значение по умолчанию — String.Empty.
bool Multiselect
{ get; set; }
true, если пользователю разрешено выбрать несколько
файлов. Значение по умолчанию — false.
string[] FileNames
{get;}
Массив имен файлов, выбранных пользователем.
string Filter {get; set;}
Строка фильтра.
int FilterIndex
{get; set;}
Индекс пары <описание-фильтр> из строки фильтра,
которая будет выведена при создании диалога.
bool CheckFileExists
{get; set;}
Вывод предупреждения, если пользователь ввел имя
несуществующего файла.
string InitialDirectory
{ get; set; }
Начальный каталог, который будет выведен при создании
диалога.
bool RestoreDirectory
{ get; set; }
true, если после поиска каталог должен быть восстановлен.
Значение по умолчанию —false.
 Можно восстановить все значения свойств, принятые по умолчанию, вызвав метод
public override void Reset();
Пример
 В приведенном ниже коде
• создается объект класса OpenFileDialog:
• задается строка-фильтр;
• в том случае, когда пользователь подтвердил выбор, нажав кнопку Open, имя файла
и текущий каталог выводятся в элемент управления TextBox.
private void button_Open_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter =
"C#(*cs)|*.cs|PowerPointDocs(*.ppt;*pptx)|*ppt;*pptx;|All(*.*)|*.*";
dlg.FilterIndex = 2;
if ( dlg.ShowDialog()== true )
{ textBox1.Text =
dlg.FileName + "\n" + Directory.GetCurrentDirectory().ToString();
}
}
Класс OpenFileDialog
 Свойства класса OpenFileDialog:
bool Multiselect {get; set;}
true, если пользователю разрешено выбрать
несколько файлов. Значение по умолчанию —
false..
bool ShowReadOnly {get; set;}
Наличие отмечаемой кнопки ReadOnly.
bool ReadOnlyChecked {get; set;}
Состояние отмечаемой кнопки ReadOnly.
 Метод класса открывает файл, имя которого выбрал пользователь, в режиме только для
чтения (независимо от состояния отмечаемой кнопки <ReadOnly>) :
public Stream OpenFile();
Класс SaveFileDialog
 Свойства класса SaveFileDialog:
bool CreatePrompt
{get; set;}
Запрос, следует ли создавать файл, который не существует.
bool OverwritePrompt
{get; set;}
Запрос, следует ли перезаписать файл, который уже
существует.
 Метод класса создает и открывает файл, имя которого выбрал пользователь, в режиме
для чтения/записи (если файл уже существует, записанные в нем данные будут потеряны):
public Stream OpenFile();
Download