gpt4 book ai didi

c# - Windows Phone 8 中具有多个 ItemTemplates 的列表框

转载 作者:太空狗 更新时间:2023-10-30 00:11:16 24 4
gpt4 key购买 nike

我有一个 ListBox,它是一个对话气泡列表(就像消息传递应用程序),每个气泡都可以来自用户或系统。因此在资源中定义了列表框的两个数据模板。我如何有选择地将它们应用到列表框?

我尝试了 DataTemplateSelector(这是 WP7 的解决方案,但我在 WP8 中找不到该类!),使用(WP8 不支持 DataType),最后在 ItemTemplate 属性上使用 IValueConvertor - 全部失败有用!

有什么方法可以做到这一点?我想一定有办法,因为这是一个相当简单的要求?!

谢谢

最佳答案

DataTemplateSelector 是根据 XAML 数据绑定(bind)中的项目类型更改 ItemTemplates 的推荐方法。 DataTemplateSelector 不是内置于 WP7,也不是内置于 WP8。您必须在线找到您喜欢的 DataTemplateSelector 版本并使用它。或者自己动手,因为它大约有 5-10 行代码。

custom DataTemplateSelectors in WP7 上有一篇关于 WindowsPhoneGeek 的好文章和 wp7nl 项目基于其 DataTemplateSelector base class在那篇文章上。

<ListBox x:Name="listBox" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<local:FoodTemplateSelector Content="{Binding}">
<local:FoodTemplateSelector.Healthy>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="YellowGreen" Width="400" Margin="10">
<Image Source="{Binding IconUri}" Stretch="None"/>
<TextBlock Text="{Binding Name}" FontSize="40" Foreground="Black" Width="280"/>
<TextBlock Text="healty" />
</StackPanel>
</DataTemplate>
</local:FoodTemplateSelector.Healthy>
<local:FoodTemplateSelector.UnHealthy>
<DataTemplate>
<Border BorderBrush="Red" BorderThickness="2" Width="400" Margin="10">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding IconUri}" Stretch="None"/>
<TextBlock Text="{Binding Name}" FontSize="40" Width="280"/>
<Image Source="Images/attention.png" Stretch="None" Margin="10,0,0,0"/>
</StackPanel>
</Border>
</DataTemplate>
</local:FoodTemplateSelector.UnHealthy>
<local:FoodTemplateSelector.NotDetermined>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="Gray" Width="400" Margin="10">
<Image Source="{Binding IconUri}" Stretch="None"/>
<TextBlock Text="{Binding Name}" FontSize="40" Width="280"/>
<Image Source="Images/question.png" Stretch="None" Margin="10,0,0,0"/>
</StackPanel>
</DataTemplate>
</local:FoodTemplateSelector.NotDetermined>
</local:FoodTemplateSelector>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

如果您正在寻找更快速、更肮脏的解决方案 Prism's DataTemplateSelector不需要 C# 编码,因为它 uses the DataTemplateSelector.Resources collection to handle type mapping .两个 DataTemplateSelector 类都可以复制出来并在您的应用中使用。

   1: <UserControl.Resources>
2: <DataTemplate x:Key="SelectorDataTemplate">
3: <prism:DataTemplateSelector Content="{Binding}"
4: HorizontalContentAlignment="Stretch"
5: IsTabStop="False">
6: <prism:DataTemplateSelector.Resources>
7: <DataTemplate x:Key="DataType1">
8: <StackPanel Orientation="Horizontal">
9: <TextBlock Text="{Binding ID}"/>
10: <toolkit:Separator />
11: <TextBlock Text="{Binding Name}" />
12: </StackPanel>
13: </DataTemplate>
14:
15: <DataTemplate x:Key="DataType2">
16: <StackPanel Orientation="Horizontal">
17: <TextBox Text="{Binding Index}" />
18: <toolkit:Separator />
19: <TextBox Text="{Binding Description}" />
20: </StackPanel>
21: </DataTemplate>
22:
23: </prism:DataTemplateSelector.Resources>
24: </prism:DataTemplateSelector>
25: </DataTemplate>
26: </UserControl.Resources>

还有很多DataTemplateSelectors,包括:Odyssey Phone , UIMessage和别的。

关于c# - Windows Phone 8 中具有多个 ItemTemplates 的列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14075542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com