2

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

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

应用

4

2 回答 2

3

选择和鼠标悬停颜色TriggersControlTemplatefor ListBoxItem 中定义,因此如果您想为它们使用不同(或不使用)颜色,则需要对其进行自定义。根据您想要多少原始触发器功能,您可以复制原始触发器功能(Blend 会为您执行此操作)并对其进行修改或仅使用如下简单的东西:

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

或者,您应该考虑您是否真的需要 aListBox或者可以只使用 base ItemsControl,它没有您试图摆脱的鼠标悬停行为。该决定应基于您是否需要项目选择,因为这是ListBox添加的主要内容。

于 2013-06-20T15:29:53.600 回答
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>
于 2013-06-20T14:24:10.183 回答