有多种方法可以达到这种效果。以下是使用ViewBox和GridView的解决方案。
在XAML(你可以用绑定IconUri矩形更改为IMAGE):
<Viewbox x:Name="box">
<GridView x:Name="test" Margin="0,0,0,0" MaxHeight="800" MaxWidth="800" Grid.Column="1" >
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Margin="20">
<TextBlock Text="{Binding Name}" FontWeight="Bold"
Style="{StaticResource BaseTextBlockStyle}"/>
<Rectangle Width="100" Height="30" Fill="Red" />
<TextBlock Text="{Binding IconUri}" TextWrapping="NoWrap"
Style="{StaticResource BodyTextBlockStyle}" />
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid MaximumRowsOrColumns="3" Orientation="Horizontal"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.GroupStyle>
<GroupStyle HidesIfEmpty="True">
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid Background="LightGray" Margin="0">
<TextBlock Text='{Binding Name}'
Foreground="Black" Margin="30"
Style="{StaticResource HeaderTextBlockStyle}"/>
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</GridView.GroupStyle>
</GridView>
</Viewbox>
在CS:
cvsProjects = new List<Project>();
Project item0 = new Project() { Name = "pic1", IconUri = "Images/p1.jpg"};
Project item1 = new Project() { Name = "pic2", IconUri = "Images/p2.jpg" };
Project item2 = new Project() { Name = "pic3", IconUri = "Images/p3.jpg" };
Project item3 = new Project() { Name = "pic4", IconUri = "Images/p4.jpg" };
Project item4 = new Project() { Name = "pic5", IconUri = "Images/p5.jpg" };
Project item5 = new Project() { Name = "pic6", IconUri = "Images/p6.jpg" };
cvsProjects.Add(item0);
cvsProjects.Add(item1);
cvsProjects.Add(item2);
cvsProjects.Add(item3);
cvsProjects.Add(item4);
cvsProjects.Add(item5);
test.ItemsSource = cvsProjects;
感谢,使用视框是解决我的所有问题! –