データ モデルを介して 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="..."
で、以前に生成された のリサイクルを無効にすることができます。ListBoxItem
ListBox
ListBox
セットの XAML で、VirtualizingStackPanel.VirtualizationMode="Standard"
以前に生成された ListBoxItem をリサイクルするのではなく、毎回新しい ListBoxItem を強制的に生成します。
これは、Loaded
イベント ハンドラーが毎回呼び出されることを意味し、動的に色付けされたテキストを生成するために、 の通常のテキストを s にTextBlock
置き換えることができます。<Run>