Jav*_*wag 4 c# xaml windows-phone-8
我有一个ListBox,它是一个会话气泡列表(如消息传递应用程序),每个气泡可以来自用户或来自系统.因此,列表框中有两个DataTemplates,它们在资源中定义.如何有选择地将这些应用于ListBox?
我尝试过DataTemplateSelector(这是WP7的解决方案,但我找不到WP8中的类!),使用(WP8不支持DataType),最后是ItemTemplate属性的IValueConvertor - 一切都无济于事!
这样做的方法是什么?我想必须有一种方法,因为这是一个相当简单的要求?!
谢谢
Jus*_*gel 12
DataTemplateSelector是ItemTemplates基于XAML数据绑定中的项类型进行更改的推荐方法.DataTemplateSelectorWP7没有内置,也没有WP8内置.你必须在网上找到你喜欢的版本DataTemplateSelector并使用它.或者只是滚动你自己,因为它是大约5-10行代码.
关于WP7中的自定义DataTemplateSelectors和基于该文章的DataTemplateSelector基类的 wp7nl项目,WindowsPhoneGeek上有一篇很好的文章.
<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>
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找更快速和更脏的解决方案,Prism的DataTemplateSelector不需要C#编码,因为它使用DataTemplateSelector.Resources集合来处理类型映射.这两个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>
Run Code Online (Sandbox Code Playgroud)
还有更多DataTemplateSelectors,包括:Odyssey Phone,UIMessage等.
| 归档时间: |
|
| 查看次数: |
8807 次 |
| 最近记录: |