我有GridView
由ObservableCollection
填充(通过绑定)。如何设置它以便每次将新项添加到ObservableCollection
时,GridView中的最后一项始终都有一个按钮?
这是GridView的ItemTemplate
的XAML<GridView.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Left" Width="250" Height="250">
<Border Background="White">
<Image Source="{Binding ImagePath}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
</Border>
<StackPanel VerticalAlignment="Bottom" Background="{ThemeResource ListViewItemOverlayBackgroundThemeBrush}">
<TextBlock Text="{Binding Title}" Foreground="{ThemeResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextBlockStyle}" Height="60" Margin="15,0,15,0"/>
<TextBlock Text="{Binding DateMade}" Foreground="{ThemeResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/>
</StackPanel>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
我的问题在于此模板应用于GridView中的所有项目。我想要它,以便如果它是 last 项目(并且每次添加新项目时最后一项都会不断更改),上面的StackPanel
应该被另一个控件替换(例如,一个按钮)。我该怎么做呢?
答案 0 :(得分:1)
我会扩展所有元素的模板但隐藏附加元素,只有在它是最新元素时才会显示它(由某个bool属性指定,在最后一个元素上设置为true)。这样的事情。
<GridView.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Left" Width="250" Height="250">
<Border Background="White">
<Image Source="{Binding ImagePath}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
</Border>
<Button Visibility="{Binding IsLastElement, Converter={StaticResource BoolToVisibilityConverter}}"/>
<StackPanel VerticalAlignment="Bottom" Background="{ThemeResource ListViewItemOverlayBackgroundThemeBrush}">
<TextBlock Text="{Binding Title}" Foreground="{ThemeResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextBlockStyle}" Height="60" Margin="15,0,15,0"/>
<TextBlock Text="{Binding DateMade}" Foreground="{ThemeResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/>
</StackPanel>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
我认为另一个选择是使用TemplateSelecting事件动态更改DataTemplate,改变元素的内容,但这样做会更多。
但可能有更好的解决方案。
修改强>
决定分享上述想法的一些链接(我在WinRT中使用过)和另一个在WPF中可用的链接
WPF Based Dynamic DataTemplateSelector - 在WinRT中使用了类似的方法
DataTemplateSelector - 尝试稍加修改的示例并正常运行