MSDN Library
Информация
Запрошенная вами тема показана ниже. Однако эта тема не включена в библиотеку.

Изменения в API Windows 8.1 (XAML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

В этом документе перечислены удаленные возможности API, функциональные изменения API и оптимизации API, реализованные в Windows 8.1.

Мы внесли значительные изменения и выполнили оптимизацию для улучшения приложений в Windows 8.1. В частности, изменен элемент пользовательского интерфейса XAML, добавлена новая модель размера окон, изменены профили .NET и пр. Вы ощутите эффект многих оптимизаций, не изменяя код, но для некоторых улучшений потребуется внести изменения. Чтобы добиться максимальной производительности приложений, мы рекомендуем отказаться от использования устаревших API.

Другие данные о переносе см. в следующих ресурсах.

Важно  Подробнее об изменениях API в Windows 8.1, относящихся к программированию на JavaScript и к Internet Explorer, см. в статье об изменениях API в Windows 8.1 (приложения Магазина Windows на JavaScript и HTML).
 

Изменения в отдельных API

В следующей таблице представлены API, которые стали работать иначе в Windows 8.1.

APIОписание
ApplicationModel.Background namespace Инфраструктура фоновых задач заранее проверяет параметры. Подробнее см. в описании класса BackgroundTaskBuilder и в разделе Краткое руководство: создание и регистрация фоновой задачи.
ResourceLoader class Пользовательский интерфейс приложений Магазина Windows может отображаться на нескольких мониторах.
ApplicationViewSwitcher.DisableShowingMainViewOnActivation method Приложения, создающие несколько основных окон, представляют основное окно после активации. Подробнее: Пример нескольких представлений.
LanguageFontGroup class Шрифты, использованные в приложении Магазина Windows, могли измениться в Windows 8.1.
DisplayProperties class Некоторые члены класса DisplayProperties устарели, но также добавлены новые члены. Данное изменение может вызывать ошибки и предупреждения при сборке с использованием этого API.
MediaCapture class Это изменение распространяется на запись звука с малой и большой задержкой.
PlayToConnectionErrorEventArgs class Если ошибка происходит в приложении, использующем объект PlayToConnectionErrorEventArgs для функции "воспроизведение на устройстве", то устранение неполадок затруднено, поскольку перечисление PlayToConnectionError недостаточно информативно.
StorageFile.GetThumbnailAsync method В Windows 8.1 этот метод может возвращать эскиз любого размера.
CoreDispatcher.ProcessEvents method Рекурсивный вызов этого метода может привести к завершению приложения с ошибкой. Кроме того, CoreDispatcher.ProcessEvents следует вызывать только из потока, в котором создавался CoreWindow. Вызов этого метода из других потоков приведет к сбою с явной ошибкой.
CoreDispatcher.AcceleratorKeyActivated event В Windows 8.1 навигация фокуса клавиатуры клавишей TAB переводит к правильному объекту в пользовательском интерфейсе.
PropertyAnimation class Анимация свойств в Windows 8.1 выполняется более плавно, когда приложение переходит от одной анимации к другой. Это изменение также влияет на метод Storyboard.Begin.
Application.LoadComponent(Object, Uri) method В Windows 8.1 словари ресурсов не полностью создаются на этапе разметки.
FlipView.UseTouchAnimationsForAllNavigation property В Windows 8.1 анимация для перемещения между элементами выполняется во всех случаях, а не только для сенсорного ввода.
Control.Focus method Изменено задание программного фокуса. Подробнее см. в разделе FocusState property.
FrameworkElement.LayoutUpdated event Если приложение присоединяет два прослушивателя, а затем удаляет один из них, то удаляется только один прослушиватель.
ItemsPresenter.Header property Учитываются свойства VerticalAlignment и HorizontalAlignment, заданные в заголовке. Это изменение также влияет на свойство ItemsPresenter.HeaderTemplate property.
FrameworkElement.BaseUri property Может разрешать специфические для файла универсальные коды ресурсов (URI) для определяемых в XAML частей шаблона.
AutomationPeer.GetPatternCore method Элементы управления могут поддерживать собственное одноранговое поведение для элементов автоматизации пользовательского интерфейса Майкрософт.
UIElement.ManipulationMode property ManipulationModes enumeration позволяет комбинировать System с другими значениями.
UIElement.ManipulationStarting event Правильно создается событие ManipulationStarting event. Это изменение также влияет на события UIElement.ManipulationCompleted и Control.OnManipulationStarting.
UIElement.PointerEntered event Теперь событие PointerEntered event создается правильно. Это изменение также влияет на событие UIElement.PointerExited event.
UIElement.PointerWheelChanged event В интерфейс Direct Manipulation добавлена поддержка жестов сенсорной панели.
UIElement.RightTapped event Значения координат X и Y для даты этого события имеют правильный порядок в Windows 8.1. Это изменение также влияет на методы Control.OnRightTapped и RightTappedRoutedEventArgs.GetPosition.
VisualTransition class В Windows 8.1 автоматически отключаются отвлекающие анимации переходов XAML.
ListView class В элементах управления XAML ListView и GridView отображается список элементов, и пользователи могут выбирать элементы.
WebView class Подробнее см. в разделе, описывающем значительные изменения в работе элемента управления WebView.
ComboBox.MaxDropDownHeight property Это свойство больше не пропускается в Windows 8.1.
MediaElement class Макет MediaElement соответствует другим элементам управления XAML в Windows 8.1.
Image.ImageOpened event Начиная с версии Windows 8.1 XAML автоматически перезагружает изображения, когда меняется масштаб экрана. Это изменение также влияет на событие ImageFailed event.
TextBox.IsColorFontEnabled property Многоцветные шрифты не отображаются в текстовых элементах управления, если не перестроить их в Windows 8.1. Это изменение также влияет на свойства TextBlock.IsColorFontEnabled, RichEditBox.IsColorFontEnabled и RichTextBlock.IsColorFontEnabled.
ImageBrush.ImageSource property С помощью свойства ImageBrush.ImageSource приложения в Windows 8.1 разрешают URI в нужное расположение в пакете приложения.
VisualTreeHelper class В Windows 8.1 API VisualTreeHelper проверяет, что вызывающий объект выполняет вызов в правильном потоке.
Storyboard.GetCurrentState method Этот метод возвращает правильное значение в Windows 8.1 в случаях, когда анимация использует значение BeginTime.
BitmapImage.UriSource property В Windows 8.1 из метода задания удалена проверка URI.

 

Улучшения производительности

В следующей таблице перечислены улучшения производительности в Windows 8.1.

ИзменениеОписание
Улучшенная производительность ссылок C#Ускоренная сборка мусора в приложениях Магазина Windows. Подробнее: Повышение производительности сборки мусора.
Быстрый перезапуск после закрытияПриложениям дается пять секунд на завершение, что позволяет им быстро перезапускаться.
Возможность передачи всех ошибокТеперь распространяются ошибки, возникающие в обработчиках событий.
Приостановка выполняется с низким приоритетомЧтобы повысить скорость ответа системы, приложениям во время приостановки предоставляется доступ к ресурсам с низким приоритетом. Подробнее см. в разделе Приостановка приложения.
Модель размера окнаВ Windows 8.1 добавлена новая модель размера окна для поддержки более сложных сценариев многозадачности.
Исправление навигации фокуса в элементах управления XAML "Список" Когда пользователь переводит фокус клавиатуры в элемент управления "Список" клавишей TAB, фокус попадает на нужный элемент. Подробнее см. в разделе FlipViewItem class.
Улучшения производительности ListView и GridViewУдалены все объекты UIElement в шаблонах по умолчанию для элементов управления GridViewItem и ListViewItem, что существенно повышает производительность. Подробнее: Улучшение времени запуска для приложений с элементами управления GridView и ListView.
Повышенная безопасность в ИнтернетеПриложения, созданные для Windows 8, могут включать в свое содержимое URI http и https, а приложения, созданные для Windows 8.1, могут включать только URI https, за исключением динамических правил ContentUriRules, которые задаются в файле AppxManifest.xml. Подробнее см. в разделе руководства по совместимости Windows, посвященном допустимым URI в Windows 8.1 (HTTPS, но не HTTP).
ItemsControl.PrepareContainerForItemOverride method Когда освободится время ЦП, свойство Content получит правильное значение.
VirtualSurfaceImageSource constructor Максимальный размер при проверке параметров изменен со 100 000 000 на 17 000 000.

 

Учет изменений

В следующей таблице перечислены изменения, которые могут отразиться на работе приложения в Windows 8.1.

ИзменениеОписание
LayoutAwarePage вызывает прерывание приложенийКласс LayoutAwarePage не включен в шаблоны Microsoft Visual Studio 2013.
Переносимая библиотека классовПереносимая библиотека классов недоступна в Microsoft Visual Studio Express 2013 для Windows.
Изменения библиотеки Visual CВ библиотеке Visual C изменены методы assert() и exit(). Подробнее см. в разделе "Примечания" статьи о тестах из комплекта сертификации приложений для Windows.
После фильтрации в представлении Controls отсутствуют некоторые частиВ Windows 8.1 добавлены элементы в представление элемента управления автоматизации пользовательского интерфейса.
События трассировки событий WindowsСобытия трассировки событий Windows больше не создаются в Windows 8.1.

 

Описание изменений

После фильтрации в представлении Controls отсутствуют некоторые части

Некоторые части дерева элементов XAML не отображаются в отфильтрованном представлении элемента управления в дереве автоматизации пользовательского интерфейса. В Windows 8.1 это исправлено, и в представление элемента управления добавлены дополнительные элементы. Однако некоторые элементы, отображаемые в представлении элемента управления, не должны там находиться. В элементах XAML можно задавать новое прикрепленное свойство AutomationProperties.AccessibilityView, которое позволяет разработчику приложения указывать элементы, которые не должны отображаться в представлении элемента управления. Мы обновили шаблоны элементов управления XAML в Windows 8.1, чтобы они в случае необходимости использовали новое свойство. Если в приложении Windows 8 есть пользовательские элементы управления или настраиваемые шаблоны для встроенных элементов управления, то они должны задавать новое свойство.

События трассировки событий Windows

В компоновщике XAML в Windows 8 использовались события трассировки Windows. В Windows 8.1 этот внутрипроцессный компоновщик заменен на DirectComposition, и эти события трассировки событий Windows больше не создаются. Добавление и удаление трассировок не считается проблемой совместимости.

LayoutAwarePage вызывает прерывание приложений

В Windows 8 шаблоны Microsoft Visual Studio определяют класс LayoutAwarePage для управления визуальными состояниями, основанными на ApplicationViewState. В Windows 8.1 перечисление ApplicationViewState является устаревшим, и LayoutAwarePage более не включается в шаблоны Visual Studio для приложений Магазина Windows. Продолжение использования кода LayoutAwarePage может нарушить работу приложения. Чтобы исправить это, перепишите свое представление, чтобы оно соответствовало новому минимальному разрешению, и создавайте события на основе размера окна. В случае обновления приложения для разных размеров необходимо обрабатывать событие Window.SizeChanged, чтобы адаптировать пользовательский интерфейс приложения к новому размеру. Мы рекомендуем прекратить использование класса LayoutAwarePage и наследовать классы напрямую от класса Page.

Вот как можно избавиться от LayoutAwarePage:


protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    this.Loaded += PageLoaded;
    this.Unloaded += PageUnloaded;
 }

 private void PageUnloaded(object sender, RoutedEventArgs e)
 {
     Window.Current.SizeChanged -= Window_SizeChanged;
 }

 private void PageLoaded(object sender, RoutedEventArgs e)
 {
     Window.Current.SizeChanged += Window_SizeChanged;
 }

 private void Window_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)
 {
     if (e.Size.Width <= 500)
     {
     //VisualStateManager.GoToState(this, state.State, transitions);
     }
     else if (e.Size.Height > e.Size.Width)
     {
     //VisualStateManager.GoToState(this, state.State, transitions);
     }
     else
     {
     //VisualStateManager.GoToState(this, state.State, transitions);
     }
 }


Переносимая библиотека классов

Переносимая библиотека классов доступна только для Microsoft Visual Studio Professional 2013. Она недоступна в Visual Studio Express 2013 для Windows.

Улучшения производительности ListView и GridView

Класс GroupStyle

Три свойства класса GroupStyle для ListView и GridView считаются устаревшими и не обрабатываются. Свойства Panel, ContainerStyle и ContainerStyleSelector класса GroupStyle больше не учитываются, если ItemsPanel имеет значение ItemsStackPanel. Элементы ListView и GridView будут иметь макет традиционного списка (сверху вниз). Поэтому макет или внешний вид элементов в группе может измениться в приложении Windows 8, которое перекомпилируется для Windows 8.1, если в нем явно не задано значение ItemsPanel, но заданы свойства Panel, ContainerStyle и ContainerStyleSelector. Приложение, зависящее от внутренней структуры и типов объектов ListView по умолчанию, может аварийно завершиться, поскольку меняется тип ItemsPanel, а GroupItems не создается, когда GroupStyle.Panel имеет значение ItemsStackPanel. Аварийное завершение вероятнее всего при проходе по визуальному дереву.

Чтобы избежать этого, верните для ItemsPanel панель Windows 8 (VirtualizingStackPanel) или исключите предположения о структуре визуального дерева.

Свойство ItemsPanel

Свойство ItemsPanel по умолчанию изменилось в Windows 8.1. В Windows 8 свойство ItemsPanel класса ListView по умолчанию имело значение VirtualizingStackPanel, а свойство ItemsPanel класса GridView по умолчанию имело значение WrapGrid. В Windows 8.1 по умолчанию используется ItemsStackPanel для ListView и ItemsWrapGrid для GridView. Это изменение может вызывать аварийное завершение при проходе по визуальному дереву. Чтобы избежать этого, верните для свойства ItemsPanel значение по умолчанию, действовавшее в Windows 8.

Быстрый перезапуск после закрытия

Если в Windows 8.1 пользователь закроет приложение, а затем сразу перезапустит его, то закрытому приложению будет дано пять секунд на полное завершение перед перезапуском. В Windows 8 приложение завершается сразу после перезапуска.

Возможность передачи всех ошибок

В Windows 8.1 распространяются ошибки, обнаруженные в обработчиках событий. Необработанные ошибки приводят к завершению работы приложения. Перед завершением работы создается событие CoreApplication::UnhandledErrorDetected, которое дает разработчику возможность обработать ошибку и избежать завершения работы приложения. Заметьте, что это событие не заменяет событие XAML UnhandledException. Необработанные ошибки в приложениях Магазина Windows на XAML создают оба события, и разработчик может использовать то, которое лучше подходит для приложения.

Модель размера окна

В Windows 8.1 добавлена новая модель размера окна для поддержки более сложных сценариев многозадачности. Дискретные состояния просмотра больше не применяются, и прикрепленное состояние больше не нужно. Теперь размер всех приложений может плавно меняться вплоть до минимального. Приложение может иметь минимальную ширину в 500 или 320 пикселей. По умолчанию минимальный размер составляет 500 пикселей.

Свойство ApplicationView.Value и метод ApplicationView.TryUnsnap из Windows 8 считаются устаревшими. Если ваше приложение их использует, компилятор выдает предупреждения. Приложение должно зарегистрироваться для получения события изменения размера окна, чтобы вовремя обновлять макет. Но вместо вызова ApplicationView.Value для определения того, в каком состоянии просмотра находится приложение, используйте Window.Current и свойство Window.Bounds для получения общего размера окна или ApplicationView.GetForCurrentView и свойство ApplicationView.Orientation для получения ориентации. В Windows 8.1 конструктор приложения определяет пороговые значения размера окна и запросы носителя, которые создает приложение для обновления макета.

Вот возможные способы переноса кода.

Просмотр общего размера окна:

Windows 8

private void WindowSizeChanged(object sender, WindowSizeChangedEventArgs e) {
    // Get view state
    ApplicationViewState currentViewState = ApplicationView.Value;
 
    if (currentViewState == ApplicationViewState.FullScreenLandscape) {
       // Full screen Landscape layout
    }
    else if (currentViewState == ApplicationViewState.FullScreenPortrait) {
       // Full screen Portrait layout
    }
    else if (currentViewState == ApplicationViewState.Filled) {
       // Filled layout
    }
    else if (currentViewState == ApplicationViewState.Snapped) {
       // Snapped layout
    }
}


Windows 8.1

private void WindowSizeChanged(object sender, WindowSizeChangedEventArgs e) {
        // Get window size
        var WindowWidth = Window.Current.Bounds.Width;
 
        // App code to change layout based on window width
}


Просмотр ориентации:

Windows 8

private void WindowSizeChanged(object sender, WindowSizeChangedEventArgs e) {
    // Get view state
    ApplicationViewState currentViewState = ApplicationView.Value;
 
    if (currentViewState == ApplicationViewState.FullScreenLandscape || currentViewState == ApplicationViewState.Filled) {
       // Landscape layouts
    }
    else if (currentViewState == ApplicationViewState.FullScreenPortrait) {
       // Portrait layouts
    }
}


Windows 8.1

private void WindowSizeChanged(object sender, WindowSizeChangedEventArgs e) {
    // Get window orientation
    ApplicationViewOrientation winOrientation = ApplicationView.GetForCurrentView().Orientation;
 
    if (winOrientation == ApplicationViewOrientation.Landscape) {
       // Landscape layouts
    }
    else if (winOrientation == ApplicationViewOrientation.Portrait) {
       // Portrait layouts
    }
}


Связанные разделы

Переработка приложения Магазина Windows для Windows 8.1
Обновленные образцы
Программирование DirectX
Изменения API для Windows 8.1 (приложения Магазина Windows на JavaScript и HTML)

 

 

Показ:
© 2016 Microsoft