2013-03-13 41 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