2014-06-16 5 views
0

J'ai une application WPF et je veux ajouter un élément avec HorizontalAlignment = Gauche, puis autre avec HorizontalAlignment = droite, comme un chat dans WhatsApp, mais tout le texte dans la liste a un alignement horizontal sur le à droite, comment puis-je utiliser un alignement horizontal différent dans la même zone de liste.C#, alignement horizontal Listbox

Ceci est mon code 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> 

et c'est le code C# derrière:

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

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

Merci!

+0

manière la plus simple: Vous devez ajouter une nouvelle zone de texte pour chaque message et définissez sa HorizontalAlignment propriété et les mettre dans un stackpanel –

+0

vous n'avez pas 'ListBox.Items.Add()' dans WPF. Créez un ViewModel approprié et utilisez DataBinding correct à la place. –

Répondre

0

Vous pouvez créer un seul StackPanel pour porter le ListView. Comme cela,

<StackPanel> 
    <ListView x:Name="chatList" Width="value" /> 
</StackPanel> 

Vous ne avez pas vraiment besoin StackPanel, je juste utilisé!

Maintenant, sur le code CSharp, vous pouvez gérer les événements de l'utilisateur ou du réseau. Je ne vais pas aller dans la profondeur du processus, mais un exemple de ce serait

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! :-) 
} 

Vous pouvez exécuter ce code, chaque fois qu'il est nouvel élément à appened! Mais vous devez vraiment vous assurer que les conditions sont vérifiées. Parce que l'utilisation de la condition, vous pouvez changer la couleur de l'article aussi, comme dans WhatsApp, vous pouvez aussi faire d'autres choses. Cela dépend totalement de la condition et de la façon dont vous l'utilisez.

Bonne chance!

+0

Merci Afzaal !!! – user3745396

+0

@ user3745396, Ne marquez le comme réponse si cela fonctionne pour vous! :-) –

0

Vous pouvez y parvenir en appliquant le style de votre ListBoxItem et en utilisant AlternationCount et AlternationIndex comme indiqué ci-dessous:

<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

Première utilisation du trigger, merci! – user3745396

+0

@ user3745396 tout en travaillant avec wpf, il faut d'abord apprendre mvvm et quelque chose qui peut être fait dans xaml seulement, devrait avoir la préférence sur le code – Nitin

Questions connexes