使用圆角设置`ListView`菜单

时间:2012-01-26 13:48:17

标签: wpf xaml listview styling listviewitem

我正在寻找使用ListView构建一个菜单(我愿意使用其他任何能够实现我正在寻找的效果的东西。我想模仿的外观如下

Google Calendar Menu

以下是我目前为XAML所做的事情。

    <ListView 
        ItemsSource="{Binding Decisions}" 
        SelectedItem="{Binding SelectedDecision}" 
        HorizontalAlignment="Left"
        BorderThickness="0"
        Width="350"
        FontSize="12">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel 
                    Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Border 
                    BorderThickness="1" 
                    BorderBrush="#DDD" 
                    CornerRadius="2">
                    <TextBlock 
                        Text="{Binding Converter={StaticResource DecisionTypeNameConverter}}"
                        Padding="8"
                        Background="#EEE" />
                </Border>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

这会产生一个好看的菜单,直到我选择一个项目。选择一个项目后,它会被一个丑陋的深蓝色包围。如何在XAML中重新创建此外观(不需要渐变效果)?

2 个答案:

答案 0 :(得分:1)

为了防止蓝色选择​​矩形,您必须设置ItemContainerStyle而不是ItemTemplate。请参阅ListView Styles and Templates上的MSDN,了解ListViewItem默认样式,尤其是“Selected”可视状态。

答案 1 :(得分:1)

您是否需要跟踪SelectedItem

如果没有,我建议使用ItemsControl

如果是这样,您需要覆盖所选的项目笔刷颜色,使其不显示。这是一种系统颜色,我通常会像这样覆盖它:

<ListView.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
</ListView>