【问题标题】:C#, Listbox Horizontal AlignmentC#,列表框水平对齐
【发布时间】:2014-06-16 15:07:17
【问题描述】:

我有一个 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!!!");

谢谢!

【问题讨论】:

  • 最简单的方法:你应该为每条消息添加一个新的文本框并设置它的 Horizo​​ntalAlignment 属性并将它们放在一个堆栈面板中
  • 你没有在 WPF 中ListBox.Items.Add()。创建一个合适的 ViewModel 并改用合适的 DataBinding。

标签: c# wpf listbox


【解决方案1】:

您可以创建一个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 中一样,您也可以做其他事情。这完全取决于条件以及您使用它的方式。

祝你好运!

【讨论】:

    【解决方案2】:

    您可以通过在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>
    

    【讨论】:

    • @user3745396 在使用 wpf 时,应该先学习 mvvm,而一些只能在 xaml 中完成的东西,应该优先于代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多