C# 如何为列表框创建不同的ItemsPanelTemplate
我正在WindowsPhone8上写一个即时通讯程序。我现在正在处理聊天的UI。 我想创建一个C# 如何为列表框创建不同的ItemsPanelTemplate,c#,wpf,xaml,C#,Wpf,Xaml,我正在WindowsPhone8上写一个即时通讯程序。我现在正在处理聊天的UI。 我想创建一个列表框,其中包含所有的“聊天泡泡”(如iPhone中的泡泡)。传入消息显示在左侧,传出消息显示在右侧。像这样: 显然,我需要为每个项目设置不同的对齐方式 我试图通过在一个大的网格中包装气泡来解决这个问题,该网格扩展了ItemsPanel中的所有空间,并将聊天气泡向右对齐(聊天气泡的父级是大的网格)。但这不起作用,因为ItemsPanel中的网格不会自动填充所有空间。然后我去搜索“如何填充ItemsPa
列表框
,其中包含所有的“聊天泡泡”(如iPhone中的泡泡)。传入消息显示在左侧,传出消息显示在右侧。像这样:
显然,我需要为每个项目设置不同的对齐方式
我试图通过在一个大的网格
中包装气泡来解决这个问题,该网格扩展了ItemsPanel
中的所有空间,并将聊天气泡向右对齐(聊天气泡的父级是大的网格
)。但这不起作用,因为ItemsPanel
中的网格不会自动填充所有空间。然后我去搜索“如何填充ItemsPanel中的所有空格”,但没有运气
因此,我认为唯一的方法是为每个ItemsPanel设置不同的ItemsPanelTemplate
,设置为“Right”或“Left”
请帮帮我。。谢谢大家!
那么,如何为不同的
ItemsPanelTemplate
创建选择器呢 您的消息只需要两个视图,即DataTemplate
一个用于
MyMsg
,另一个用于Answer
,这两个选项都来自消息类或接口(您的决定),让我们称之为Msg
因此,您可以将
项目资源
设置为列表
或可观察收集
,这样您就完成了您的消息只需要两个视图,即数据模板
一个用于
MyMsg
,另一个用于Answer
,这两个选项都来自消息类或接口(您的决定),让我们称之为Msg
因此,您可以将
itemsource
设置为List
或observedcollection
,这样就完成了您只需要自定义itemscontainer:
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Style.Triggers>
<DataTrigger Binding="{Binding IsAnswer}" Value="True">
<Setter Property="HorizontalAlignment" Value="Right"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ItemsControl.ItemContainerStyle>
如果没有样式触发器,可以使用绑定和布尔到水平对齐转换器:
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="HorizontalAlignment" Value="{Binding IsAnswer,Converter={StaticResource AlignmentConverter}}"/>
</Style>
</ItemsControl.ItemContainerStyle>
您只需自定义itemContainer:
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Style.Triggers>
<DataTrigger Binding="{Binding IsAnswer}" Value="True">
<Setter Property="HorizontalAlignment" Value="Right"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ItemsControl.ItemContainerStyle>
如果没有样式触发器,可以使用绑定和布尔到水平对齐转换器:
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="HorizontalAlignment" Value="{Binding IsAnswer,Converter={StaticResource AlignmentConverter}}"/>
</Style>
</ItemsControl.ItemContainerStyle>
如果您有一个区分每个项目类型的属性,则可以对该属性值使用数据触发器。你可以将一个触发器设置为左对齐,另一个设置为右对齐。但是,样式触发器在Windows Phone 7或8应用程序中不再可用。如果您有区分每种项目类型的属性,则可以对该属性值使用数据触发器。你可以将一个触发器设置为左对齐,另一个设置为右对齐。但是样式触发器在Windows Phone 7或8应用程序中不再可用。谢谢,但它不起作用,因为样式触发器在Windows Phone中不可用。是否有任何等效或替代方法?谢谢,但它不起作用,因为样式触发器在Windows Phone中不可用。是否有任何等效或替代方法?