1

私はWindowsPhone8でIMプログラムを作成しています。現在、チャット用のUIを扱っています。ListBoxすべての「チャットバブル」(iPhoneの場合のように)を保持するを作成したいと思います。着信メッセージは左側に表示され、発信メッセージは右側に表示されます。このような:

ここに画像の説明を入力してください

したがって、明らかに、アイテムごとに異なる配置を設定する必要があります。

Gridのすべてのスペースを拡張する大きなバブルをラップしItemsPanel、チャットバブルを右に揃えることでこれを解決しようとしました(チャットバブルの親はラージGridです)。しかし、グリッドインItemsPanelがすべてのスペースを自動的に埋めることができないため、それは機能しませんでした。そして、「ItemsPanelのすべてのスペースを埋める方法」を検索しましたが、運がありませんでした。

したがって、これを行う唯一の方法は、ItemsPanelTemplateItemsPanelごとに「右」または「左」に設定することだと思います。

助けてください..ありがとう!

では、どのように異なるセレクターを作成しますItemsPanelTemplateか?

4

2 に答える 2

1

itemContainer をカスタマイズするだけです:

<ItemsControl.ItemContainerStyle>
    <Style TargetType="ContentPresenter">
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsAnswer}" Value="True">
                <Setter Property="HorizontalAlignment" Value="Right"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ItemsControl.ItemContainerStyle>

スタイル トリガーがない場合は、バインディングと bool から Horizo​​ntalAlignment へのコンバーターを使用できます。

<ItemsControl.ItemContainerStyle>
    <Style TargetType="ContentPresenter">
        <Setter Property="HorizontalAlignment" Value="{Binding IsAnswer,Converter={StaticResource AlignmentConverter}}"/>
    </Style>
</ItemsControl.ItemContainerStyle>
于 2013-03-13T10:30:23.280 に答える
0

あなたはあなたのメッセージのために2つのビューだけを必要とします別名DataTemplate

1つ はメッセージクラスまたはインターフェイス(あなたの決定)からの両方の継承のためMyMsgに1つはそれを呼び出すことができますAnswerMsg

ItemsSourceに設定することができますList<Msg>またはObservableCollection<Msg>あなたは完了です

于 2013-03-13T07:44:22.847 に答える