我收到了Windows8
个用户对SelectedItem
上ListBoxes
周围奇怪框架的投诉
在Windows7
这个问题不存在,到目前为止我找不到摆脱这个白框的方法。
据我所知,Windows8
列表框现在使用ControlBrushKey
而不是HighlightBrushKey
,但将其设置为Transparent
无效。
我目前没有Windows8开发环境,所以我尝试的所有修复都是纯粹的猜测工作。
ListBox资源:
<ListBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent" />
<Style TargetType="ListBoxItem">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="BorderBrush" Value="Transparent" />
</Style>
</ListBox.Resources>
可以在此处找到整个Xaml:https://github.com/saddam213/MPDisplay/blob/master/GUIFramework/GUI/Controls/GUIList.xaml
框架图片:(选择周围的白框)
如果有人知道如何摆脱这种情况就会很棒。
答案 0 :(得分:2)
在原帖中的评论中,您说:
我不会因为刷子需要重写而重建控件,如果我需要覆盖整个ListBox模板以删除选择颜色,我就不会支持Windows8,一旦安装就会很简单Win8使用snoop找到画笔
然而,“重建”ListBoxItem
并不困难。事实上,它可能比强制刷子更简单,因为您不必担心覆盖Windows版本之间的每个UX更改。我正在构建的一个特定应用程序要求它在从XP到8.1的每个操作系统上运行;通过将所有内容自定义到窗口边框,我实现了所有操作系统的统一外观。
您最好的选择是通过创建模板来设置ListBoxItem
的 ,如下所示:
<Style TargetType="ListBoxItem">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Green" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Blue" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
显然,您需要修改样式以获得所需的确切行为。
答案 1 :(得分:1)
我认为这可能对您有所帮助。使用isSelected的Trigger属性。
<ListBox Name="lst">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True" >
<Setter Property="BorderBrush" Value="Wheat"/>
<Setter Property="BorderThickness" Value="0"/>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
答案 2 :(得分:1)
是的,最后一个答案确实有帮助。 这就是我摆脱ListBoxItem周围的白框的方法:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Setters>
<Setter Property="BorderBrush" Value="Gray"/>
<Setter Property="BorderThickness" Value="0,0,0,1"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Background" Value="Black"/>
</Style.Setters>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Background="Black"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>