ListBox ItemTemplate背景透明

时间:2013-09-22 15:31:52

标签: c# .net wpf listbox

我正在尝试将背景设置为透明,但正如您在鼠标悬停在ListBoxItem上方时在屏幕截图中看到的那样,它会在项目上显示蓝色矩形:

ListViewItem Screen Shot

我正在使用MVVM,我的实现如下:

<UserControl.Resources>
    <Style x:Key="HyperLinkStyle" TargetType="{x:Type Hyperlink}">
        <Setter Property="Foreground" Value="#FF0066CC"/>
        <Setter Property="TextDecorations" Value="None" />
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Foreground" Value="#FF0066CC"/>
                <Setter Property="TextDecorations" Value="Underline" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="True">
                <Setter Property="Cursor" Value="Hand"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

<Grid>
    <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0, 10, 0, 0">
        <ListBox x:Name="TeamListView" ItemsSource="{Binding Teams}" BorderThickness="0" 
                 SelectionMode="Single" Background="Transparent">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <DataTemplate.Resources>
                        <Style TargetType="ListBoxItem">
                            <Setter Property="Background" Value="Transparent"/>
                            <Style.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="Background" Value="Transparent"/>
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </DataTemplate.Resources>
                    <TextBlock Margin="0, 0, 0, 5">
                            <Hyperlink Style="{Binding Source={StaticResource HyperLinkStyle}}" 
                                       Command="{Binding ElementName=TeamListView, Path=DataContext.ConnectToTeam}" 
                                       CommandParameter="{Binding}">
                                <TextBlock Text="{Binding Path=DisplayName}" />
                            </Hyperlink>
                    </TextBlock>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>

注意:

  1. 超链接样式用于为列表框中的超链接控件提供超链接感。

  2. 列表框'TeamListView'使用ItemTemplate DataTemplate。 ItemTemplate的样式是ListBoxItem,通过将background设置为透明onMouseHover,意图是在悬停时删除没有颜色的蓝色。

  3. 我错过了什么?

2 个答案:

答案 0 :(得分:1)

如果您只想删除ListBoxItem的突出显示,您可以设置系统颜色,如下所示:

<Style TargetType="ListBoxItem">
     <Style.Resources>  
         <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" color="Transparent" />
         <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
    </Style.Resources>

答案 1 :(得分:1)

尝试在ListBox.Resources中添加此内容,然后移除IsMouseOver触发器:

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

在系统中有默认的高亮显示笔刷,具体取决于您的系统主题。要更改此值,必须转到SystemColors

引自MSDN

  

SystemColors类提供对系统画笔和颜色的访问,例如ControlBrush,ControlBrushKey和DesktopBrush。系统画笔是一个SolidColorBrush对象,它使用指定的系统颜色绘制区域。系统刷总是产生实心填充;它无法用于创建渐变。

     

您可以将系统画笔用作静态或动态资源。如果您希望刷子在应用程序运行时更改系统画笔时自动更新,请使用动态资源;否则,请使用静态资源。

.NET 4.5系统中不使用SystemColors,因此,您应该: