我有这个 XAML
显示 ListView
在 C++/CX
代码。 ListView
将用作选择菜单。
<ListView x:Name="itemsListView"
ItemsSource="{Binding Source={StaticResource MenuDataSourceCVS}}"
HorizontalAlignment="Stretch"
Width="230"
Margin="0,45,0,0"
VerticalAlignment="Top"
Grid.Row="1"
SelectionChanged="itemsListView_SelectionChanged" SelectionMode="Single"
HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
FontFamily="Global User Interface">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="40" Width="230">
<TextBlock Text="{Binding Name}"
Margin="10,5" Width="150" Height="30"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"/>
<Border Height="30" Width="30" Margin="5">
<Image Source="{Binding ImageSrc}" Stretch="Fill"/>
</Border>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
正如您在下图中所看到的,选择并没有占据所有列,并在选择时显示一个复选标记。
有没有办法消除这个填充和复选标记?
最佳答案
您需要在 Blend 中打开您的 View ,然后右键单击列表并选择“编辑附加模板”/“编辑生成的项目容器 (ItemContainerStyle)”/“编辑副本”。然后你可以编辑Style
为 ListViewItem
由 ListView
生成当它装满你的元素时。在左侧的“状态”选项卡中,您可以看到 ListViewItem
使用的状态。 .当您选择其中之一时 - 设计图面会显示 ListViewItem 在该状态下的外观,并且还会切换到记录模式,您可以在其中定义模板的各种元素属性的属性值。然后您可以查看哪些元素受到视觉状态动画的影响,并修改这些动画或删除元素本身。如果您在 Blend 中删除一个元素 - 所有相关的视觉状态动画将被自动删除,因此在您的情况下,您可以在 SelectionStates
中看到这一点。 VisualStatesGroup
Selected
状态更改 SelectionBackground
元素的 Opacity
到 1. 您可以修改该目标 Opacity
将其修改为另一个所需值或简单地删除 SelectionBackground
的所有状态中的值元素通过在“对象和时间轴”面板中选择它(它实际上会从所有状态的模板中删除它并删除影响它的所有动画)。那么你可能同样想删除 HintGlyphBorder, SelectingGlyph, SelectedCheckMarkOuter
.
要删除填充 - 确保通过单击微小的红色录制按钮或将“状态”选项卡中当前显示的状态切换回“基础”,确保禁用状态录制,然后选择 ContentBorder
并更改其 Margin
在“属性”选项卡中设置为 0,0,0,0 并对 SelectedBorder
执行相同操作.
这是来自 Blend 的带注释的屏幕截图:
关于Listview 选择显示,无填充且无复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987745/