2013-03-13 38 views
1

我在Windows Phone 8上编写即时消息程序。目前我正在处理用于聊天的UI。 我想创建一个包含所有“聊天泡泡”(如iPhone中的那些)的ListBox。传入的消息出现在左侧,传出的消息出现在右侧。就像这样:如何为列表框创建不同的ItemsPanelTemplate

enter image description here

所以,很显然,我需要设置不同的充对准每个项目。

我试着在一个大Grid一个可扩展的ItemsPanel所有空间包裹泡沫解决这个问题,并对准聊天泡到右(聊天气泡的母公司是大Grid)。但是这不起作用,因为ItemsPanel中的网格不会自动填充所有空格。然后我去搜索“如何填写ItemsPanel中的所有空间”并且没有运气。

所以,我认为唯一的方法是为每个ItemsPanel设置不同的ItemsPanelTemplate为“Right”或“Left”。

请帮帮我..谢谢!

那么你如何为不同的ItemsPanelTemplate创建一个选择器?

+1

如果您有区别各个项目类型的属性,你可以使用一个数据触发适当的价值。你可以有一个触发器设置左对齐,另一个设置对齐 – failedprogramming 2013-03-13 08:17:00

+0

我试过了。但Windows Phone 7或8应用程序中不再提供样式触发器。 – 2013-03-14 01:33:36

回答

0

你只需要2查看对邮件又名DataTemplate

一个MyMsg,一个用于Answer从Message类或接口(您决定)都inhire可以称之为Msg

,您可以设置您ItemsSourceList<Msg>ObservableCollection<Msg>和你做

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> 

如果你没有风格的触发器,您可以使用绑定和布尔到的Horizo​​ntalAlignment转换器:

<ItemsControl.ItemContainerStyle> 
    <Style TargetType="ContentPresenter"> 
     <Setter Property="HorizontalAlignment" Value="{Binding IsAnswer,Converter={StaticResource AlignmentConverter}}"/> 
    </Style> 
</ItemsControl.ItemContainerStyle> 
+0

谢谢,但它不起作用,因为样式触发器在Windows Phone中不可用。是否有任何等同或替代方法? – 2013-03-14 01:35:10

+0

编辑我的答案 – user1064519 2013-03-14 12:49:04