2014-06-16 41 views
0

我有一個WPF應用程序,我想用Horizo​​ntalAlignment = Left添加一個項目,然後用Horizo​​ntalAlignment = right添加一個項目,就像在WhatsApp中聊天一樣,但是列表框中的所有文本都有水平對齊對,如何在同一個列表框中使用不同的水平對齊。C#,Listbox水平對齊

這是我的XAML代碼:

<ListBox x:Name="ListBoxChat" HorizontalAlignment="Stretch" Height="366" VerticalAlignment="Top" Width="270" Margin="2,44,0,0" Padding="2"/> 
<TextBlock Foreground="Transparent" Name="TextB" Margin="2,-5,2,-3"></TextBlock> 

,這是後面的C#代碼:

ListBoxChat.HorizontalAlignment = HorizontalAlignment.Left; 
ListBoxChat.Items.Add("How are you ?"); 

ListBoxChat.HorizontalAlignment = HorizontalAlignment.Right; 
ListBoxChat.Items.Add("Fine!!!"); 

謝謝!

+0

最簡單的方法:你應該添加一個新的文本框爲每個郵件,並設置其的Horizo​​ntalAlignment屬性,並把它們放在一個stackpanel –

+0

你不在'ListBox.Items.Add()'在WPF中。創建一個合適的ViewModel並使用適當的DataBinding。 –

回答

0

您可以創建一個StackPanel來攜帶ListView。與此類似,

​​

你並不真正需要的StackPanel,我只是用它!

現在在CSharp代碼上,您可以處理用戶或網絡的事件。我不會在這個過程中的深度去,但是這方面的一個例子是

void addItem (object sender, EventArgs e) { 
    // first create the new item! 
    ListViewItem item = new ListViewItem(); 
    // add the properties.. 
    item.Content = "Hi, my name is Slim Shady!"; 
    if(messageBy == "user") { 
     // if message is by user, align it to right 
     item.HorizontalAlignment = HorizontalAlignment.Left; 
    } else { 
     // if message is by network (friend), align it to left 
     item.HorizontalAlignment = HorizontalAlignment.Right; 
    } 
    // now add the item to the listbox 
    chatList.Items.Add(item); // done! :-) 
} 

您可以執行此代碼,每次有要appened新項目!但是你確實需要確保檢查條件。因爲使用條件,你可以改變項目的顏色,就像WhatsApp,你也可以做其他的東西。它完全取決於條件,以及你使用它的方式。

祝你好運!

+0

謝謝Afzaal !!! – user3745396

+0

@ user3745396,如果它適合您,請將其標記爲答案! :-) –

0

您可以通過應用在你的ListBoxItem風格和使用AlternationCountAlternationIndex,如下圖所示實現這一目標:

<ListBox x:Name="ListBoxChat" HorizontalAlignment="Stretch" Height="366" VerticalAlignment="Top" Width="270" Margin="2,44,0,0" Padding="2" 
     AlternationCount="2"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), 
        RelativeSource={RelativeSource Self}}" Value="0"> 
       <Setter Property="HorizontalContentAlignment" Value="Left"></Setter> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), 
        RelativeSource={RelativeSource Self}}" Value="1"> 
       <Setter Property="HorizontalContentAlignment" Value="Right"></Setter> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</ListBox.ItemContainerStyle> 

+0

第一次使用觸發器,謝謝! – user3745396

+0

@ user3745396在使用wpf時,應該首先學習mvvm,並且只能在xaml中完成,應該通過代碼獲得首選項 – Nitin