平,
所以我假设我有这个ListBox.ItemTemplate:
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key="DataTemplate1">
<StackPanel Orientation="Horizontal">
<StackPanel Height="100" Width="100">
<TextBlock TextWrapping="Wrap" Text="{Binding name}" FontWeight="Bold"/>
<TextBlock TextWrapping="Wrap" Text="{Binding age}" FontWeight="Bold"/>
</StackPanel>
<StackPanel Height="100" Width="100">
<Image Height="100"/>
<Image Height="100"/>
</StackPanel>
<StackPanel Height="100" Width="100">
<TextBlock TextWrapping="Wrap" Text="blah blah" FontSize="13.333"/>
<TextBlock TextWrapping="Wrap" Text="{Binding something}"/>
</StackPanel>
<StackPanel Height="100" Width="100">
<TextBlock TextWrapping="Wrap" Text="Time" FontSize="13.333"/>
<TextBlock TextWrapping="Wrap" Text="45 minutes"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
我想要实现的是第二个堆栈面板中的图像数量,这一个:
<StackPanel Height="100" Width="100">
<Image Height="100"/>
<Image Height="100"/>
</StackPanel>
是动态的,一些列表框项目为2,其他列表框项目为3或4。
我想知道是否有可能通过绑定和模板来实现这一目标? 我不想在代码中手动执行此操作。
答案 0 :(得分:2)
您可以使用ListBox替换该特定StackPanel。然后可以将ListBox绑定到Image集合,并可以将其ItemTemplate设置为显示图像。像这样:
<DataTemplate x:Key="DataTemplate1">
<StackPanel Orientation="Horizontal">
<StackPanel Height="100" Width="100">
<TextBlock TextWrapping="Wrap" Text="{Binding name}" FontWeight="Bold"/>
<TextBlock TextWrapping="Wrap" Text="{Binding age}" FontWeight="Bold"/>
</StackPanel>
<ListBox ItemsSource="{Binding DynamicCollectionOfImages}">
<ListBox.ItemTemplate>
<DataTemplate>
<Image Height="100" Source="{Binding .}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<StackPanel Height="100" Width="100">
<Image Height="100"/>
<Image Height="100"/>
</StackPanel>
<StackPanel Height="100" Width="100">
<TextBlock TextWrapping="Wrap" Text="blah blah" FontSize="13.333"/>
<TextBlock TextWrapping="Wrap" Text="{Binding something}"/>
</StackPanel>
<StackPanel Height="100" Width="100">
<TextBlock TextWrapping="Wrap" Text="Time" FontSize="13.333"/>
<TextBlock TextWrapping="Wrap" Text="45 minutes"/>
</StackPanel>
</StackPanel>
</DataTemplate>
答案 1 :(得分:-1)
当每个列表项都有不同的图像集时,您应该在主列表中添加另一个ListBox,并将Image控件作为ItemTemplate。
但是当您只有一些图像集(例如,有2,3和4个静态图像)用于整个列表并想要为每个列表项显示其中一个时,您可以准备3个StackPanel的listBoxItem模板并更改其可见性取决于DataSource的某些属性。此属性值应转换为Visibility枚举成员。
EG。当图像应该依赖于DataSource的整数ImagesSet
属性时:
<StackPanel Height="100" Width="100" Visibility={Binding ImagesSet, Converter={StaticResources ImagesSetToVisibility}, ConverterParameter=2}>
<Image Height="100"/>
<Image Height="100"/>
</StackPanel>
<StackPanel Height="100" Width="100" Visibility={Binding ImagesSet, Converter={StaticResources ImagesSetToVisibility}, ConverterParameter=3}>
<Image Height="100"/>
<Image Height="100"/>
<Image Height="100"/>
</StackPanel>
<StackPanel Height="100" Width="100" Visibility={Binding ImagesSet, Converter={StaticResources ImagesSetToVisibility}, ConverterParameter=4}>
<Image Height="100"/>
<Image Height="100"/>
<Image Height="100"/>
<Image Height="100"/>
</StackPanel>
转换器应检查,如果value等于参数并返回Visibility.Visbile或Visibility.Collapsed:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return ((int)value) == ((int)parameter) ? Visibility.Visible : Visibility.Collapsed;
}