Типові виправлення після оновлення Windows Store додатків з версії 8 до 8.1


Переводячи свої програми на платформу 8.1, я виявив, що це досить складне заняття, яке не потребує особливих зусиль.
Після перекладу часто виникають типові попередження, що виникли в результаті невідповідності платформ. Зрозуміло, ці попередження бажано виправити.
Розглянемо найпопулярніші виправлення?

При оновленні обов'язково зробіть копію директорії з проектом. По-перше, у вас завжди буде бекап, а по-друге ви можете мати Store версії для Windows 8 і Windows 8.1 одночасно.

1. Попередження Windows.ApplicationModel.DataTransfer.DataPackage.SetUri(System.Uri)» є застарілим: «SetUri may be altered or unavailable for releases after Windows 8.1. Instead, use SetWebLink or SetApplicationLink.»

Найпростіше і легко исправляющееся попередження. У версії 8.1 setUri раделили на різні методи SetWebLink і SetApplicationLink. Якщо у вас посилання на веб-сайт, то досить замінити setUri на SetWebLink

2. Попередження Windows.UI.Notifications.TileTemplateType.TileWideText04» є застарілим: «TileWideText04 may be altered or unavailable for releases after Windows 8.1. Instead, use TileWide310x150Text04.»

Знову ж таки, досить просто замінити TileWideText04 на TileWide310x150Text04 або на шаблон тайла будь-якого іншого розміру.

3. Попередження Windows.UI.Xaml.Controls.ScrollViewer.ScrollToVerticalOffset(double)» є застарілим: «ScrollToVerticalOffset may be altered or unavailable for releases after Windows 8.1. Instead, use ChangeView.»

Означає, що ScrollToVerticalOffset відтепер застарілий метод. Слід замінити код подібний наступного
scrollV.ScrollToHorizontalOffset(100); // тут scrollV це ім'я елемента ScrollViewer
scrollV.ScrollToVerticalOffset(0);

на
scrollV.ChangeView(100, 0, 1);

4. Попередження Windows.UI.ViewManagement.ApplicationView.Value» є застарілим: «Value may be altered or unavailable for releases after Windows 8.1. Instead, query for window layout sizes directly.»

Це найпопулярніше, найчастіше виникає попередження.
Об'єкт ApplicationView є застарілим. У Windows 8.1 до режиму snap доданий також і режим 50/50. Це дає більше можливостей для обробки станів додатка, але це також і змушує нас робити прив'язку до ширини екрана, а не до назви конкретного стану.

На C# робимо це так:
Реєструємо подія Window.Current.SizeChanged += Window_SizeChanged;
І далі в коді обробника події, в залежності від розміру екрану девайса, запускаємо необхідну обробку:
private void Window_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e)
{
if (e.Size.Width <= 1000){
// тут обробляємо екран такого розміру
}
else if (e.Size.Width <= 500){
// і тут обробляємо екран такого розміру
}
else{}

// отримуємо значення поточного розташування орієнтації екрану
ApplicationViewOrientation winOrientation = ApplicationView.GetForCurrentView().Orientation;
if (winOrientation == ApplicationViewOrientation.Landscape) {
// альбомна орієнтація
}
else if (winOrientation == ApplicationViewOrientation.Portrait) {
// портретна орієнтація
}
}

Як ви могли побачити в прикладі, орієнтацію (Layout) екрана все ще можна визначити по співвідношенню сторін, а за назвою. Цілком можливо, що в найближчому часі орієнтацію девайса можна буде визначити лише за співвідношенням ширини до висоти. Якщо ширина більше, то вона альбомна, а якщо менше, то портретна. В аналогічному на прикладі JavaScript так і зробимо (приклад з офіційного гайдлайна у мене вже відмовився працювати):
// реєструємо подія resize
window.addEventListener. ("resize", function (e) {
var windowWidth = document.documentElement.offsetWidth; // отримуємо ширину вікна
var windowHeight = document.documentElement.offsetHeight; // отримуємо висоту вікна
if (windowWidth <= 500) {
// обробляємо як нам потрібно це стан
}else{}
// визначаємо, що пристрій знаходиться в портретній орієнтації, якщо ширина менше висоти
if (windowWidth>windowHeight) {
// альбомна орієнтація
} else {
// портретна орієнтація
}

});

Приємним плюсом в додатках на HTML5 була і є можливість задати стилі для різних положень і розмірів екрану. У 8.1 ці медіа стилі були трохи змінені зі стилів вказують стан програми на стилі, вказують на ширину у пікселях.
Тобто, такі стилі як:
@media-ms-view-state: snapped)
або
@media-ms-view-state: filled)

були замінені на класичні:
@media (min-width: 500px) and (max-width: 1023px)
або
@media (min-width: 1024px)

Також є зміни в стилях орієнтації. Тепер вони виглядають так:
@media (orientation: landscape) {
/* CSS-стилі для альбомної орієнтації */
}
@media (orientation: portrait) {
/* CSS-стилі для портретної орієнтації */
}

Для тих, кому все здалося занадто просто, наведу ще одну рідкісну помилку, яка виникає при оновленні програми, створеного у версії developer preview (більшості розробників вона не загрожує).
Після оновлення проект відмовився відкриватися, видаючи наступну помилку:
D:\TesT\TesT.csproj: error: імпортований проект «C:\Program Files\MSBuild\Microsoft\WindowsXaml\v11.0\Microsoft.Windows.UI.Xaml.CSharp.targets» не виявлений. Перевірте шлях в оголошенні Import і наявність файлу на диску. D:\TesT\TesT.csproj

Відкриваємо файл проекту і знаходимо в ньому подібну рядок:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />

Замінюємо v$(VisualStudioVersion) версію нашої використовуваної студії. У моєму випадку це версія Visual Studio 2013 а значить заміняю на v12.0

Резюме:
Оновити додаток не тільки можна, але й нескладно. Дерзайте!
Якщо встигнете зробити це в цьому році, то у вас буде можливість взяти участь в конкурсі і заодно розкрутити свій додаток.
Ще однією досить приємною плюшки від оновлень додатка буде безліч поліпшень продуктивності 8.1
Змін досить багато. Привів тільки найпопулярніші помилки, з якими стикався сам. Залюбки прочитаю про інші помилки/попередження в коментарях.

Офіційні керівництва і список змін:
Зміни в API Windows 8.1 (HTML)
Зміни в API Windows 8.1 (XAML)

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.