MSDN ライブラリ
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows 8.1 での API の変更点 (XAML)

[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]

このドキュメントでは、Windows 8.1 における API の削除、機能の変更点、最適化を示します。

Windows 8.1 のアプリのパフォーマンスを高めるために、大幅な変更と最適化を行いました。これらの最適化には、XAML UI コントロールの変更、新しいウィンドウ サイズ モデル、.NET プロファイルの変更などが含まれています。コードを変更しなくても、多くの最適化がわかると思いますが、変更を伴うものもあります。非推奨となった API の使用を控え、アプリのパフォーマンスを最大化することをお勧めします。

移植に関するその他のリソースについては、以下をご覧ください。

重要  JavaScript と Internet Explorer でのプログラミングに関係する Windows 8.1 での API の変更について詳しくは、「Windows 8.1 での API の変更点 (JavaScript と HTML を使った Windows ストア アプリ)」をご覧ください。
 

特定の API に影響する変更

次の表には、Windows 8.1 での動作が変更された API を示しています。

API説明
ApplicationModel.Background namespace バックグラウンド タスクのインフラストラクチャはパラメーターを事前に検証します。詳しくは、BackgroundTaskBuilder クラスと「クイック スタート: バックグラウンド タスクの作成と登録」をご覧ください。
ResourceLoader class Windows ストア アプリの UI を一度に複数のモニターに表示できます。
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.ProcessEventsCoreWindow が作成されたスレッドからのみ呼び出す必要があります。このメソッドを他のスレッドから呼び出すと、明示的なエラーで失敗します。
CoreDispatcher.AcceleratorKeyActivated event Windows 8.1 のキーボード フォーカスのタブ ナビゲーションでは、UI の適切なオブジェクトに移動します。
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 アプリに 2 つのリスナーがアタッチされ、1 つが削除された場合、そのリスナーだけが削除されます。
ItemsPresenter.Header property VerticalAlignment プロパティと HorizontalAlignment プロパティは、ヘッダーで設定された場合、優先されます。この変更は、ItemsPresenter.HeaderTemplate propertyにも影響します。
FrameworkElement.BaseUri property XAML で定義されたテンプレート パーツのファイル固有の URI を解決できます。
AutomationPeer.GetPatternCore method コントロールは、Microsoft UI オートメーションでコントロール独自の項目のピア動作を提供できます。
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 Windows 8.1 では、このイベントに関するイベント データからの X/Y 位置の値が正しい順序で並べられます。この変更は、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 Windows 8.1 では、MediaElement のレイアウトは、他の XAML コントロールと似ています。
Image.ImageOpened event Windows 8.1 以降では、表示スケールが変更されたとき XAML が自動的に画像を再読み込みします。この変更は、ImageFailed eventにも影響します。
TextBox.IsColorFontEnabled property アプリのテキスト コントロールでは、Windows 8.1 で再ビルドされるまで、複数色のフォントはレンダリングされません。この変更は、TextBlock.IsColorFontEnabledRichEditBox.IsColorFontEnabledRichTextBlock.IsColorFontEnabled の各プロパティにも影響します。
ImageBrush.ImageSource property ImageBrush.ImageSource プロパティを使うと、Windows 8.1 のアプリは、アプリ パッケージの正しい場所に URI を解決します。
VisualTreeHelper class Windows 8.1 では、VisualTreeHelper API は呼び出し元が正しいスレッドで呼び出しを行っているかどうかを検証します。
Storyboard.GetCurrentState method アニメーションが BeginTime の値を使う場合、Windows 8.1 では、このメソッドは正しい値を返します。
BitmapImage.UriSource property URI の検証は、Windows 8.1 の setter からは削除されています。

 

パフォーマンスの向上

次の表は、Windows 8.1 のパフォーマンスの向上点を示しています。

変更説明
C# の参照のパフォーマンス向上Windows ストア アプリでガベージ コレクションの速度が向上しました。詳しくは、「ガベージ コレクションのパフォーマンスの向上」をご覧ください。
アプリを閉じた後のすばやい再起動アプリは 5 秒以内に終了するため、すばやく再起動できます。
すべてのエラーを明らかにする機能イベント ハンドラーで発生したエラーは伝達されるようになりました。
一時停止は低い優先度で発生システムの応答性を向上させるために、アプリには一時停止時にリソースへの優先度の低いアクセスが与えられます。詳しくは、「アプリを一時停止する方法」をご覧ください。
ウィンドウ サイズ モデルより充実したマルチタスクのシナリオをサポートするために、Windows 8.1 には新しいウィンドウ サイズ モデルを追加しました。
XAML リスト コントロールでのフォーカス ナビゲーションの修正ユーザーがキーボードでリスト コントロールにフォーカスを移動すると、フォーカスが正しい項目に移動します。詳しくは、「FlipViewItem class」をご覧ください。
ListView と GridView のパフォーマンスの向上 GridViewItemListViewItem の既定のコントロール テンプレートの全 UIElement オブジェクトが削除されたため、パフォーマンスが大幅に向上しています。詳しくは、「GridView と ListView コントロールがあるアプリの起動時間の短縮」をご覧ください。
Web セキュリティの強化点Windows 8 用に構築されたアプリでは、アプリのコンテンツ URI に httphttps URI を含めることができます。ただし、Windows 8.1 用に構築されたアプリでは、AppxManifest.xml ファイルで指定する動的 ContentUriRules を除き、https URI しか含めることができません。詳しくは、Windows の互換性クックブックWindows 8.1 で許可されるのは http URI ではなく、https URI のみであることを説明しているページをご覧ください。
ItemsControl.PrepareContainerForItemOverride method CPU 時間が利用できるようになると、Content プロパティは正しい値に設定されます。
VirtualSurfaceImageSource constructor パラメーター検証の最大サイズは 100,000,000 から 17,000,000 に変更されました。

 

緩和された変更点

次の表は、Windows 8.1 で実行されるアプリに影響を及ぼす可能性がある変更点を示しています。

変更説明
LayoutAwarePage によってアプリが動作しなくなるLayoutAwarePage クラスは、Microsoft Visual Studio 2013 のテンプレートに含まれなくなりました。
ポータブル クラス ライブラリポータブル クラス ライブラリは、Microsoft Visual Studio Express 2013 for Windows で利用できません。
Visual C ライブラリの変更点Visual C ライブラリでは、assert()exit() に変更があります。詳しくは、「Windows アプリ認定キットのテスト」の「注釈」セクションをご覧ください。
フィルター処理されたときにコントロールのビューで一部が表示されないWindows 8.1 では、UI オートメーション コントロール ビューに要素が追加されました。
Windows イベント トレーシング (ETW) のイベントWindows 8.1 では、ETW イベントは発生しなくなりました。

 

変更の説明

フィルター処理されたときにコントロールのビューで一部が表示されない

XAML 要素ツリーの一部は UI オートメーション ツリーのフィルター処理されたコントロール ビューには表示されません。Windows 8.1 では、コントロール ビューにより多くの要素を含めることで、これを解決します。ただし、コントロール ビューに表示される一部の要素は、表示されないようにする必要があります。新しい添付プロパティである AutomationProperties.AccessibilityView を XAML 要素で設定することで、アプリ開発者は、コントロール ビューに表示しない要素を指定できます。Windows 8.1 では、組み込みの XAML コントロール テンプレートを更新し、新しいプロパティが適切に使われるようにしました。Windows 8 アプリにカスタム コントロールや組み込みのコントロールのカスタム テンプレートがある場合は、これらに新しいプロパティを設定する必要があります。

Windows イベント トレーシング (ETW) のイベント

Windows 8 では、XAML は ETW イベントをそのコンポジターでトレースします。Windows 8.1 では、そのインプロセス コンポジターが DirectComposition に置き換えられるため、これらの ETW イベントは発生しません。互換性の問題からトレースを追加または削除することは検討しないでください。

LayoutAwarePage によってアプリが動作しなくなる

Windows 8 の場合、Microsoft Visual Studio テンプレートは LayoutAwarePage クラスを定義し、ApplicationViewState に基づいて表示状態を管理します。Windows 8.1 の場合、ApplicationViewState は廃止され、LayoutAwarePage は Windows ストア アプリ用の Visual Studio テンプレートに含まれていません。LayoutAwarePage コードを使い続けると、アプリが動作しなくなる可能性がありますこれを修正するには、新しい最小解像度に対応するようにビューを書き直し、ウィンドウ サイズに基づいたイベントを作成します。アプリを更新してサイズを変更する場合は、Window.SizeChanged イベントを処理して、新しいサイズに適合した UI にする必要があります。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 for Windows では利用できません。

ListView と GridView のパフォーマンスの向上

GroupStyle クラス

ListViewGridViewGroupStyle クラスの 3 つのプロパティは非推奨となり、無視されます。ItemsPanelItemsStackPanel の場合、GroupStylePanelContainerStyleContainerStyleSelector プロパティは優先されません。ListViewGridView は、従来のリストのように上から下へレイアウトされます。そのため、アプリで明示的に ItemsPanel を設定せず、PanelContainerStyleContainerStyleSelector を設定している場合、Windows 8.1 用に再コンパイルされた Windows 8 アプリでは、グループ内の項目のレイアウトや外観が変わる可能性があります。既定の ListView オブジェクトの内部構造と型に依存するアプリは、GroupStyle.PanelItemsStackPanel であると、ItemsPanel の型が変更され、GroupItems が作成されないため、クラッシュする可能性があります。このクラッシュは、ビジュアル ツリーの走査中に発生する可能性が最も高くなります。

これを回避するには、Windows 8 パネル (VirtualizingStackPanel) に ItemsPanel を設定し直すか、ビジュアル ツリーの構造に関する推定を削除します。

ItemsPanel プロパティ

既定の ItemsPanel のプロパティは、Windows 8.1 で変更されています。Windows 8 では、ListView の既定の ItemsPanelVirtualizingStackPanel で、GridView の既定の ItemsPanelWrapGrid です。Windows 8.1 では、ListView の既定値は ItemsStackPanelGridView の既定値は ItemsWrapGrid になりました。この変更により、ビジュアル ツリーの走査中にクラッシュが発生する場合があります。回避策は、ItemsPanel プロパティを Windows 8 の既定値に設定し直すことです。

アプリを閉じた後のすばやい再起動

Windows 8.1 では、ユーザーがアプリを閉じてすぐに再起動する場合、閉じられたアプリは、再起動の前に 5 秒以内に完全に終了することになっています。Windows 8 では、アプリは再起動時に直ちに終了します。

すべてのエラーを明らかにする機能

Windows 8.1 では、イベント ハンドラーで発生したエラーは伝達されるようになりました。ハンドルされないエラーがあると、アプリケーションの終了がトリガーされます。終了する前に CoreApplication::UnhandledErrorDetected イベントが発生するため、開発者は終了せずにエラーを処理する機会を得ることができます。ただし、このイベントは XAML の UnhandledException イベントに代わるものではありません。XAML を使った Windows ストア アプリでのハンドルされないエラーは、これら両方のイベントを生成するため、開発者はアプリに適した方のイベントを使うことができます。

ウィンドウ サイズ モデル

より充実したマルチタスクのシナリオをサポートするために、Windows 8.1 には新しいウィンドウ サイズ モデルを追加しました。 個別のビュー状態の概念はなくなり、スナップされた状態は不要になりました。代わりに、アプリのサイズを最小サイズまでの任意のサイズに無段階で調節できます。アプリの最小幅は 500px か 320px に設定できます。既定では、アプリの最小サイズは 500px です。

Windows 8 の ApplicationView.Value プロパティと ApplicationView.TryUnsnap メソッドは非推奨になったので、アプリで使うとコンパイラの警告が表示されます。アプリはレイアウトを更新するタイミングを把握するために、ウィンドウのサイズ変更イベントに対して登録する必要があります。ただし、ApplicationView.Value を呼び出してアプリのビュー状態を特定する代わりに、Window.CurrentWindow.Bounds プロパティを使って一般的なウィンドウ サイズを取得するか、ApplicationView.GetForCurrentViewApplicationView.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 プログラミング
Windows 8.1 での API の変更点 (JavaScript と HTML を使った Windows ストア アプリ)

 

 

表示:
© 2016 Microsoft