データ モデルを介して ListBoxItems のレンダリングをプログラムでフックするための、Windows Phone の Silverlight オプションのすべてを削減したように見えたのでLoaded="..."、TextBlock.
これは最善の解決策とは思えませんが、おそらくそれは私のコードの好みによるものであり、実際には Windows Phone で正しい方法です。
TextBlockいずれにせよ、私は直接に夢中になっているので、ListBoxItemを含む上でデータバインドされたオブジェクトに到達する方法がわかりませんTextBlock...生成されたListBoxItemにツリーをバックアップする方法について誰かがアドバイスを持っている場合バインドされたオブジェクトを他の場所から取得する代わりに、直接使用できます。
が生成されるため、XAML でそのイベント ハンドラーListBoxItemを配置する場所が見つからないことに注意してください。Loaded="..."は属性ListBox.ItemTemplateを受け入れません。Loaded
更新: これは機能しません!
Loaded イベント ハンドラは、TextBlockが最初に作成されロードされたときに発生するため、置換は最初に機能します。
しかし
生成さListBoxItemれたものはリサイクルされているようです (リストにしばらく表示する必要のない画面外のListBox.ItemContainerGeneratorエントリが多数ある場合に、まったく新しいコンテナをインスタンス化することによって過剰な量のメモリを使用したくないと思います) )、これが発生すると、Loaded イベントは発生しません。
が最初にロードされたときにコンテンツを変更したTextBlockため、バインディングの関連付けが壊れて、ListBoxItemがリサイクルされると、古いデータや正しくないデータが含まれるようになります。
まだ解決策はありません。
IValueConvertor を使用して、どうにかしてバインディング ターゲットへの参照を渡すことを考えています。
更新 2: ようやく動作するようになりました...
イベント ハンドラーに固執することで、内部で使用されるVirtualizingStackPanel を構成することLoaded="..."で、以前に生成された のリサイクルを無効にすることができます。ListBoxItemListBox
ListBoxセットの XAML で、VirtualizingStackPanel.VirtualizationMode="Standard"以前に生成された ListBoxItem をリサイクルするのではなく、毎回新しい ListBoxItem を強制的に生成します。
これは、Loadedイベント ハンドラーが毎回呼び出されることを意味し、動的に色付けされたテキストを生成するために、 の通常のテキストを s にTextBlock置き換えることができます。<Run>