如何去除ListBox使用UniformGrid作为面板时的点击、悬停高亮效果
问题原因
你看到的浅蓝色高亮是ListBox默认条目容器ListBoxItem的悬停、选中状态样式,你给Button设置的Margin属于ListBoxItem的渲染区域,因此触发状态时会透出容器的高亮色。
解决方案
有两种常用实现方式:
方式1:重写ListBoxItem的样式(保留ListBox原有功能)
直接在你的ListBox代码中添加ItemContainerStyle配置,将容器所有状态的背景、边框都设为透明即可:
<ListBox Width="1000" Grid.Row="1" VerticalAlignment="Top" VerticalContentAlignment="Top" Name="uniformGrid1" Margin="50" ItemsSource="{Binding SomeItemsList}"> <!-- 新增ItemContainerStyle部分 --> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="Background" Value="Transparent"/> <Setter Property="BorderBrush" Value="Transparent"/> <Setter Property="BorderThickness" Value="0"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="Transparent"/> <Setter Property="BorderBrush" Value="Transparent"/> </Trigger> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="Transparent"/> <Setter Property="BorderBrush" Value="Transparent"/> </Trigger> <Trigger Property="IsKeyboardFocused" Value="True"> <Setter Property="Background" Value="Transparent"/> <Setter Property="BorderBrush" Value="Transparent"/> </Trigger> </Style.Triggers> </Style> </ListBox.ItemContainerStyle> <!-- 以下是原有代码 --> <ListBox.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Columns="2" Background="Transparent" Name="uniformGrid1"></UniformGrid> </ItemsPanelTemplate> </ListBox.ItemsPanel> <ListBox.ItemTemplate> <DataTemplate> <Button Margin="50" Height="70" Click="keyword_Click" Width="250" Foreground="Black" FontSize="16" FontFamily="Helvetica Neue" FontWeight="Bold" BorderBrush="SlateGray" Content="{Binding Name}"> <Button.Background> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Color="White" Offset="0.073" /> <GradientStop Color="White" Offset="1" /> <GradientStop Color="#FFE9E9F9" Offset="0.571" /> <GradientStop Color="#FFD7D7EC" Offset="0.243" /> </LinearGradientBrush> </Button.Background> </Button> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
方式2:替换为ItemsControl(不需要选中功能时更简便)
如果你不需要ListBox的条目选中、多选等功能,只是用来排列按钮列表,直接把ListBox换成ItemsControl即可,ItemsControl本身没有条目高亮逻辑,无需额外修改样式。
内容的提问来源于stack exchange,提问作者Xuân Dũng Đoàn
相关产品推荐
相关产品推荐

