我使用示例应用程序简化了我的问题。所以我有一个列表,其中包含一些由矩形表示的对象。
但是如果我的应用程序打开Windows 8,我会遇到问题。当我将鼠标放在元素上时,我的矩形周围会出现一个蓝色矩形。我尝试了一些在互联网上找到的解决方案,但没有一个能够解决问题。
我的代码:
<Window x:Class="Test_application.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Test_application"
Title="MainWindow" Height="350" Width="525">
<Grid Background="DarkGray">
<ListBox Margin="10" x:Name="lbTest">
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:Segment}">
<Rectangle Width="150" Height="10" Stroke="Gray" StrokeThickness="1.354" Margin="10"/>
</DataTemplate>
</ListBox.Resources>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Canvas.Left" Value="{Binding X}"/>
<Setter Property="Canvas.Top" Value="{Binding Y}"/>
<Setter Property="Margin" Value="0" />
<Setter Property="Focusable" Value="False" />
<Setter Property="Padding" Value="0" />
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Background" Value="{x:Null}" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</Grid>
答案 0 :(得分:3)
选择和鼠标悬停颜色在Triggers
的{{1}}中为ListBoxItem定义,因此如果要为它们使用不同(或没有)颜色,则需要自定义颜色。根据您想要的原始触发器功能的多少,您可以复制原始触发器功能(Blend将为您执行此操作)并对其进行修改或仅使用如下简单的内容:
ControlTemplate
或者,您应该考虑是否确实需要 <ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Canvas.Left" Value="{Binding X}"/>
<Setter Property="Canvas.Top" Value="{Binding Y}"/>
<Setter Property="Margin" Value="0" />
<Setter Property="Focusable" Value="False" />
<Setter Property="Padding" Value="0" />
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
或者只能使用基础ListBox
,它没有您试图摆脱的鼠标悬停行为。决定应该基于您是否需要选择项目,因为这是ItemsControl
添加的主要内容。
答案 1 :(得分:0)
可以覆盖默认突出显示。
<ListView.Resources>
...
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Orange" />
...
</ListView.Resources>
取而代之的是Orange
颜色集Transparent
或#00FFFFFF
。
修改强>
或者将触发器添加到ItemContainerStyle
<Style TargetType="{x:Type ListBoxItem}">
...
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Transparent" />
</Trigger>
</Style.Triggers>
...
</Style>