Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C、 列表框水平对齐_C#_Wpf_Listbox - Fatal编程技术网

C# C、 列表框水平对齐

C# C、 列表框水平对齐,c#,wpf,listbox,C#,Wpf,Listbox,我有一个WPF应用程序,我想添加一个HorizontalAlignment=Left的项目,然后添加另一个HorizontalAlignment=right的项目,就像Whatsapp中的聊天一样,但是列表框中的所有文本都在右侧有水平对齐,如何在同一个列表框中使用不同的水平对齐方式 这是我的XAML代码: <ListBox x:Name="ListBoxChat" HorizontalAlignment="Stretch" Height="366" VerticalAlignment

我有一个WPF应用程序,我想添加一个HorizontalAlignment=Left的项目,然后添加另一个HorizontalAlignment=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>
谢谢大家!

您可以创建一个StackPanel来承载ListView。像这样,

<StackPanel>
  <ListView x:Name="chatList" Width="value" />
</StackPanel>
每次出现新项目时,您都可以执行此代码!但是你真的需要确保检查条件。因为使用这个条件,你也可以改变物品的颜色,就像在WhatsApp中一样,你也可以做其他事情。这完全取决于条件和使用方式


祝你好运

您可以通过在ListBoxItem上应用样式并使用AlternationCount和AlternationIndex来实现这一点,如下所示:

<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>

最简单的方法:您应该为每条消息添加一个新的文本框,并设置其HorizontalAlignment属性,然后将它们放在StackPanel中,而不是在WPF中添加ListBox.Items.add。创建一个适当的ViewModel并使用适当的数据绑定。@user3745396在使用wpf时,应该首先学习mvvm,并且只能在xaml中完成的事情应该优先于代码
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! :-)
}
<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>