昨日質問を投稿しましたが、正しく説明できなかったと思います。
もう一度やり直します。
これが私の目標です。
赤い吹き出しは着信メッセージを表し、青い吹き出しは発信メッセージを表します。これは、次のxamlコードでより正確に説明できます。次のコードは、実際のxamlコード(一部のDataTemplatesを含む)がコンパイルされたときに得られると予想されるものの説明にすぎないことに注意してください(WPFはDataTemplatesを使用してデータを自動的に入力します)。:
<ListBox>
<ListBoxItem HorizontalAlignment="Right">
<Grid Background="Blue">
<TextBlock Text="Help me please!" FontSize="30"/>
</Grid>
</ListBoxItem>
<ListBoxItem HorizontalAlignment="Left">
<Grid Background="Red">
<TextBlock Text="What do you want?" FontSize="30"/>
</Grid>
</ListBoxItem>
<ListBoxItem HorizontalAlignment="Right">
<Grid Background="Blue">
<TextBlock Text="I want a ListBox" FontSize="30"/>
</Grid>
</ListBoxItem>
<ListBoxItem HorizontalAlignment="Left">
<Grid Background="Red">
<TextBlock Text="Then?" FontSize="30"/>
</Grid>
</ListBoxItem>
<ListBoxItem HorizontalAlignment="Right">
<Grid Background="Blue">
<TextBlock Text="But the Grid won't fill" FontSize="30"/>
</Grid>
</ListBoxItem>
</ListBox>
これを達成するために、私は次のように書きました。
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<ListBoxItem>
<Grid Background="{Binding Color}">
<TextBlock Text="{Binding Text}" FontSize="30"/>
</Grid>
</ListBoxItem>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
上記のコードではアライメントが指定されていないことに注意してください。テンプレートを使用してListBoxItemに個別に異なるアライメントを設定する方法が本当にわからないためです。したがって、これにより、デフォルトでは、すべての青と赤のグリッドがすべて左に配置される状況になります。
私の最初のアプローチには、データテンプレートセレクターが含まれています(着信メッセージのテンプレートは省略されています)。
<ListBox>
<ListBox>
<ListBox.ItemTemplate>
<!-- local:MessageBubbleTemplateSelector.OutgoingMessageTemplate -->
<DataTemplate>
<ListBoxItem>
<Grid>
<Grid Background="{Binding Color}" HorizontalAlignment="Right">
<TextBlock Text="{Binding Text}" FontSize="30"/>
</Grid>
</Grid>
</ListBoxItem>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ListBox>
しかし、これはうまくいきませんでした。Grid
ふきだしを包むものは自動的に拡大しないので、これの内側の位置合わせは重要Grid
でGrid
はありませんでした(しっかりとはめ込まれています)。
そして、Grid
内部を拡張する方法を探しに行きましたStackPanel
が、運がありませんでした。
何時間ものグーグルと試行錯誤の末、私はItemsPanelTemplate
自分のためにテンプレートを定義することにしました。Message
オブジェクトに、着信メッセージと発信メッセージを区別するのに役立つプロパティがあります。しかし、セレクターの作成方法がわかりません(記録として、GoogleはWindows Phone 8ではサポートされていない ItemsPanelTemplate
と言っていました)。Style.Trigger
だから私の質問は:どのように異なるHorizontalAlignmentを設定するの ListBoxItems
ですか?
ところで、ItemsPabelTemplate
このように見えます:
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
ご理解のほどよろしくお願いいたします。私はすでにここで狂ったように必死です...これに多くの時間が無駄になりました...