我正在尝试将背景设置为透明,但正如您在鼠标悬停在ListBoxItem
上方时在屏幕截图中看到的那样,它会在项目上显示蓝色矩形:
我正在使用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>
注意:
超链接样式用于为列表框中的超链接控件提供超链接感。
列表框'TeamListView'使用ItemTemplate DataTemplate。 ItemTemplate的样式是ListBoxItem,通过将background设置为透明onMouseHover,意图是在悬停时删除没有颜色的蓝色。
我错过了什么?
答案 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
,因此,您应该:
创建您的Style/ControlTemplate
寻找替代方案,例如:List/Combo Box Background And Selected Colours Under .net 4.5
请参阅此link,其中显示了如何消除框架之间的差异