在Windows 8中删除控件上的MouseOver状态

时间:2013-06-20 13:46:14

标签: wpf xaml mouseover itemtemplate visualstatemanager

我使用示例应用程序简化了我的问题。所以我有一个列表,其中包含一些由矩形表示的对象。

但是如果我的应用程序打开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>

Application

2 个答案:

答案 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>