我正在尝试根据项目的大小和数量来确定如何更改模板。这与根据大小或Windows 7程序缩略图动态更改的功能区非常相似。
在这种情况下,它是ListBox的ItemTemplate,我想减小图像的大小或不显示它,而不是滚动条。
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Title}" />
<Image Source="{Binding ImageUrl}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
由于
答案 0 :(得分:4)
你可以在ListBox上设置一个样式,它根据项目数切换ItemTemplate。
<ListBox ItemsSource="{Binding Items}">
<ListBox.Resources>
<local:SizeConverter x:Key="SizeConverter"/>
<DataTemplate x:Key="SmallTemplate"></DataTemplate>
<DataTemplate x:Key="MediumTemplate"></DataTemplate>
<DataTemplate x:Key="LargeTemplate"></DataTemplate>
</ListBox.Resources>
<ListBox.Style>
<Style TargetType="ListBox">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Items.Count, Converter={StaticResource SizeConverter}}" Value="Small">
<Setter Property="ItemTemplate" Value="{StaticResource SmallTemplate}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Items.Count, Converter={StaticResource SizeConverter}}" Value="Medium">
<Setter Property="ItemTemplate" Value="{StaticResource MediumTemplate}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Items.Count, Converter={StaticResource SizeConverter}}" Value="Large">
<Setter Property="ItemTemplate" Value="{StaticResource LargeTemplate}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.Style>
</ListBox>
SizeConverter将是一个IValueConverter,它根据传入的计数返回一个大小类别,convert方法可能是这样的:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int count = (int)value;
if (count < 4) return "Large";
if (count < 12) return "Medium";
return "Small";
}
答案 1 :(得分:3)
您可能希望在WPF中使用DataTemplateSelector功能:
从链接:
通常,您创建一个 你有DataTemplateSelector 不止一个DataTemplate 您想要的相同类型的对象 提供你自己的逻辑来选择一个 DataTemplate基于的应用 每个数据对象的属性。注意 如果你有不同的对象 您可以设置DataType的类型 DataTemplate上的属性。如果你 这样做就没有必要了 创建一个DataTemplateSelector。 此外,如果你有对象 相同但有不同的类型 属性,你也可以考虑 使用DataTrigger或数据 转换器。有关更多信息,请参阅 数据模板概述。
或者,如上所述,DataTrigger可能是有用的。