我正在Windows Phone 8上编写IM程序。我目前正在处理用于聊天的UI。
我想创建一个ListBox
来保存所有“聊天气泡”(就像iPhone中的那些)。传入消息显示在左侧,传出消息显示在右侧。像这样:
很明显,我需要为每个项目设置不同的对齐。
我试图通过将气泡包裹在一个Grid
扩展ItemsPanel
中的所有空间,并将聊天气泡向右对齐(聊天气泡的父级是大Grid
)。但这不起作用,因为ItemsPanel
中的网格不会自动填满所有空格。然后我去搜索“如何填写ItemsPanel中的所有空格”并且没有运气。
所以,我认为唯一的方法是为每个ItemsPanel设置不同的ItemsPanelTemplate
,为“Right”或“Left”。
请帮帮我..谢谢!
那么如何为不同的ItemsPanelTemplate
创建一个选择器呢?
答案 0 :(得分: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到HorizontalAlignment转换器:
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="HorizontalAlignment" Value="{Binding IsAnswer,Converter={StaticResource AlignmentConverter}}"/>
</Style>
</ItemsControl.ItemContainerStyle>
答案 1 :(得分:0)
您只需要2个查看您的邮件DataTemplate
一个MyMsg
和一个Answer
来自Message类或接口(您的决定)让我们称之为Msg
因此您可以将ItemsSource
设置为List<Msg>
或ObservableCollection<Msg>
并完成