【发布时间】:2019-06-14 23:42:40
【问题描述】:
我有一个使用 DataTemplate 的 ListView。选择一个项目时,会添加边框和背景,但我不确定从哪里来。这在可视树中显示为 ContentPresenter 周围但在 ListViewItem 内的边框。这些属性显示它们是由 TemplatedParent 模板中的触发器添加的。给定以下结构,我如何覆盖这些触发器,或者我的方法是错误的?
<ListView x:Name="MyListview" ItemsSource="{Binding Thumbnails}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<local:VirtualizingWrapPanel IsItemsHost="True" ....../>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="SnapsToDevicePixels" Value="true" />
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate x:Name="ThumbItemTemplate" DataType="{x:Type local:ThumbItem}">
<Grid Margin="6" Width="128" Height="168">
<Grid.RowDefinitions>
<RowDefinition Height="128"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderThickness="0">
<Image x:Name="ThumbnailImage" MaxHeight="128" MaxWidth="128" Source="{Binding Thumbnail}" />
</Border>
<TextBlock Grid.Row="1" Margin="0,6,0,0" TextAlignment="Center" x:Name="Description" Text="{Binding Title}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
【问题讨论】:
-
这是由 ListViewItem 的 ControlTemplate 完成的。您可以通过在 ListViewItem 样式中设置 Template 属性来覆盖此行为。除此之外,除非您设置 ListView 的 View 属性,否则您还不如使用更简单的 ListBox 类:stackoverflow.com/q/4703641/1136211。如果您根本不想可视化任何选择状态,请使用 ItemsControl。
-
控制模板工作得很好,谢谢。改用列表框的好处。
标签: c# wpf contentpresenter