C#,列表框水平对齐

时间:2014-06-16 15:07:18

标签: c# wpf listbox

我有一个WPF应用程序,我想添加一个项目,其中Horizo​​ntalAlignment = Left,然后是另一个,其中Horizo​​ntalAlignment = right,就​​像Whatsapp中的聊天一样,但是列表框中的所有文本都在右侧水平对齐,我该怎么办?在同一个列表框中使用不同的水平对齐方式。

这是我的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!!!");

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以创建一个StackPanel来携带ListView。像这样,

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

你真的不需要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! :-)
}

每次有新项目被添加时,您都可以执行此代码!但是你真的需要确保检查条件。因为使用Condition,你也可以改变项目的颜色,比如 WhatsApp ,你也可以做其他的事情。这完全取决于条件和使用它的方式。

祝你好运!

答案 1 :(得分: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>