1

我正在 Windows Phone 8 上编写一个 IM 程序。我目前正在处理用于聊天的 UI。我想创建一个ListBox包含所有“聊天气泡”(如 iPhone 中的气泡)的工具。传入消息显示在左侧,传出消息显示在右侧。像这样:

在此处输入图像描述

所以很明显,我需要为每个项目设置不同的对齐方式。

我试图通过将气泡包裹在一个Grid扩大 中的所有空间的大气泡中来解决这个问题ItemsPanel,并将聊天气泡向右对齐(聊天气泡的父级是大的Grid)。但这不起作用,因为网格ItemsPanel不会自动填满所有空间。然后我去搜索“如何填充 ItemsPanel 中的所有空格”,但没有运气。

所以,我认为这样做的唯一方法是ItemsPanelTemplate为每个 ItemsPanel 设置不同的“右”或“左”。

请帮帮我..谢谢!

那么如何为不同的选择器创建一个选择器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

一个MyMsg和一个Answer 都从 Message 类或接口(您的决定)中获取,让我们调用它Msg

所以你可以设置你ItemsSourceList<Msg>ObservableCollection<Msg>你就完成了

于 2013-03-13T07:44:22.847 回答