Объект Window в UWP используется для представления окна приложения. Хотя напрямую мы работаем преимущественно с элементом Page, который представляет страницу приложения, и его кодом, но фактически объект Window является контейнером для элемента Page.
Если мы откроем файл App.xaml.cs, который есть в проекте по умолчанию и который хранит код главного класса приложения - класса App, то в нем мы можем найти использование объекта Window.
Чтобы получить текущее окно приложения, мы можем использовать статическое свойство Current:
Window window = Window.Current;
Содержимое окна устанавливается с помощью свойства Content. Чтобы окно стало активным для пользователя и чтобы пользователь смог с ним взаимодействовать, у окна надо вызвать метод Activate().
Немного экспериментируем с объектом Window. Для этого перейдем опять же в файле App.xaml.cs к методу OnLaunched(), который запускается при старте приложения, и удалим (или закомментируем) все его содержимое:
protected override void OnLaunched(LaunchActivatedEventArgs e) { }
И если мы запустим приложение, то нам просто отобразится экран заставки, потому что содержимое текущего объекта Window не установлено. Поэтому изменим метод OnLaunched следующим образом:
protected override void OnLaunched(LaunchActivatedEventArgs e) { Window.Current.Content = new Button() { Content = "Привет мир!", HorizontalAlignment = HorizontalAlignment.Center, Background = new SolidColorBrush(Windows.UI.Colors.LightPink) }; Window.Current.Activate(); }
В данном случае в качестве содержимого окна устанавливается кнопка. Причем важно сделать оба шага: установка свойства Content и активацию окна посредством
метода Activate()
. В итоге при запуске мы увидим следующее окно:
Как правило, для установки содержимого в окне приложения используются не отдельные элементы управления типа кнопок или текстовых поле, а фреймы - объекты типа Frame. Фреймы упрощают организацию содержимого в приложении, например, в виде отдельных страниц - элементов Page и передачу их в объект Window.
Для перехода к отдельной странице Frame использует метод Navigate(), в который передается тип страницы. Так, у нас по умолчанию в проекте
есть одна страница MainPage, и изменим метод OnLaunched()
, чтобы в качестве контента окна загружалась именно эта страница:
protected override void OnLaunched(LaunchActivatedEventArgs e) { Frame frame = new Frame(); Window.Current.Content = frame; frame.Navigate(typeof(MainPage)); Window.Current.Activate(); }
Платформа Universal Windows Platform предоставляет нам класс Windows.UI.ViewManagement.ApplicationView, который позволяет управлять представлением приложения. В частности, в нем определены следующие методы и свойства:
GetForCurrentView(): статический метод, который возвращает объект ApplicationView, связанный с текущим приложением
SetPreferredMinSize(Size minSize): устанавливает минимальные значения для высоты и ширины окна приложения
ExitFullScreenMode(): осуществляет выход из полноэкранного режима
SetDesiredBoundsMode(): устанавливает предпочтительные границы для окна приложения
Title: задает заголовок окна приложения
TitleBar: возвращает ссылку на верхнюю панель окна приложения или TitleBar
VisibleBounds: возвращает ссылку на границы окна приложения
Используя эти методы и свойства, мы динамически можем управлять внешним видом приложения. Если наша цель - сразу задать приложению некоторые параметры, которые
не должны меняться в течение работы приложения, то лучше это сделать в главном классе приложения App.xaml.cs в методе OnLaunched()
. Однако при
необходимости мы их можем вызвать в любом месте приложения. Например, из кода главной страницы приложения:
public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); // получаем ссылку на внешний вид приложения Windows.UI.ViewManagement.ApplicationView appView = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView(); // минимальный размер 300х250 appView.SetPreferredMinSize(new Size(300, 250)); // установка заголовка appView.Title = "Принципиально новое приложение"; // получаем ссылку на TitleBar Windows.UI.ViewManagement.ApplicationViewTitleBar titleBar = appView.TitleBar; // установка красного цвета панели titleBar.BackgroundColor = Windows.UI.Colors.Red; } }
Окно приложения после запуска: