1

イベントが存在する場合でも、XAMLIsLoadedのオブジェクトにプロパティがないように見えます。UserControlLoaded

しかし、IsLoaded の MSDN ページにUserControlFrameworkElement.

したがって、XAMLで削除されたと思います(ドキュメントはWPF用です)。しかし、彼らが WinRT でそれを削除したとは信じられません。別のものに置き換えたに違いありませんか?

では、質問: WinRTIsLoadedで a のブール値にアクセスするにはどうすればよいですか?UserControl

もちろん、Loadedイベントにコールバックを登録することで、すべてのユーザー コントロールを手動で実行することはいつでも可能ですが、そのような単純なことは面倒です。

4

3 に答える 3

3

Silverlight にもありませんFrameworkElement.IsLoaded。WinRT は WPF よりも Silverlight にはるかに近いです。

削除された理由については、WPF プロパティのドキュメントに基づいて推測できます。

新しく構築された FrameworkElement から、このプロパティは false から始まり、true に設定された後、接続された論理ツリーから要素が後でコードによって削除されても、true のままになります。true 状態は、エレメントがプレゼンテーション エンジンにロードされるときに、一般的なプレゼンテーション ロジックによって設定されます。

基本的に、WPF のプロパティは時々間違っています。コントロールは複数回ロード (およびそのLoadedイベントを発生) し、その間にアンロードすることができます。WPFIsLoadedプロパティは、実際には読み込まれていない場合でも、コントロールが読み込まれていることを示すことができます。それは...とても悪いです。

次の理由の少なくとも 1 つが原因で、修正するのではなく削除した可能性があります。

  • WPF 内で古いバージョンとの互換性を壊したり、WPF と SL / WinRT で異なる動作をするプロパティを持ちたくなかった。
  • 何かがロードされているかどうかを追跡することは難しく、間違えやすいため、本質的に危険です。
  • コントロールのロードされた状態を照会することは、とにかく悪い習慣/悪い考えかもしれません

Unloaded本当に自分で実装したい場合は、少なくともLoaded. しかし、あなたがしようとしていることによっては、より良い解決策があるかもしれないと思います.

于 2013-04-02T05:32:49.680 に答える
2

"Loaded" コントロールは単にビジュアル ツリーにあるコントロールなので、VisualTreeHelper を使用してコントロールとアプリケーションの RootVisual の間にパスがあるかどうかを確認できますが、あまり効率的ではない可能性があるため、イベント。本当に頻繁に必要な場合は、バインド可能な IsLoaded プロパティを提供する添付プロパティ/動作を実装できます。

于 2013-04-01T06:11:09.830 に答える
1

IsLoadedフレームワークの Windows ランタイム バージョンにはプロパティがありません。ご指摘のとおり、提供するリンクは Windows ランタイム用ではありません。そのためには、この MSDN リンクを参照してください: FrameworkElement

Loadedイベントは、あなたが求めていることを行う唯一の方法のようです。

于 2013-04-01T03:18:50.197 に答える