Listview 选择显示,无填充且无复选标记

标签 listview windows-8 windows-runtime winrt-xaml c++-cx

我有这个 XAML显示 ListViewC++/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>

正如您在下图中所看到的,选择并没有占据所有列,并在选择时显示一个复选标记。

ListView Selection with checkmark and padding

有没有办法消除这个填充和复选标记?

最佳答案

您需要在 Blend 中打开您的 View ,然后右键单击列表并选择“编辑附加模板”/“编辑生成的项目容器 (ItemContainerStyle)”/“编辑副本”。然后你可以编辑StyleListViewItemListView 生成当它装满你的元素时。在左侧的“状态”选项卡中,您可以看到 ListViewItem 使用的状态。 .当您选择其中之一时 - 设计图面会显示 ListViewItem 在该状态下的外观,并且还会切换到记录模式,您可以在其中定义模板的各种元素属性的属性值。然后您可以查看哪些元素受到视觉状态动画的影响,并修改这些动画或删除元素本身。如果您在 Blend 中删除一个元素 - 所有相关的视觉状态动画将被自动删除,因此在您的情况下,您可以在 SelectionStates 中看到这一点。 VisualStatesGroup Selected状态更改 SelectionBackground元素的 Opacity到 1. 您可以修改该目标 Opacity将其修改为另一个所需值或简单地删除 SelectionBackground 的所有状态中的值元素通过在“对象和时间轴”面板中选择它(它实际上会从所有状态的模板中删除它并删除影响它的所有动画)。那么你可能同样想删除 HintGlyphBorder, SelectingGlyph, SelectedCheckMarkOuter .

要删除填充 - 确保通过单击微小的红色录制按钮或将“状态”选项卡中当前显示的状态切换回“基础”,确保禁用状态录制,然后选择 ContentBorder并更改其 Margin在“属性”选项卡中设置为 0,0,0,0 并对 SelectedBorder 执行相同操作.

这是来自 Blend 的带注释的屏幕截图:
enter image description here

关于Listview 选择显示,无填充且无复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987745/

相关文章:

android - 在 ArrayAdapter 中获取 ListView 的宽度

c++ - 我可以使用纯原生 C++ 为 Windows 8 Metro 编写应用程序吗?

windows - 如何在 WinJS 应用程序中使用嵌入式浏览器嵌入第三方网页?

javascript - Windows 8 HTML/JS 应用程序可以作为网站运行吗?

c++ - 如何在 WinRT 中从 C++ 获取堆栈跟踪?

java - Java 虚拟机可以在 WinRT 上运行吗?

android - 无法在 ListView 中使用基本适配器

java - 在 Android 的 ListView 中突出显示选定的行

listview - 删除 JavaFX ListView 边框

windows-8 - 尝试重新打包 APPX 包时出现 SignTool 内部错误?