Wpf `ListView“鼠标悬停”定义为“透明”,但显示2种颜色

Wpf `ListView“鼠标悬停”定义为“透明”,但显示2种颜色,wpf,listview,styles,Wpf,Listview,Styles,我的列表视图鼠标悬停定义为透明,但结果是一半透明: 与选定的相同: 定义蓝色,但有两种颜色 为什么呢 编辑 <ListView Name="llistview" Background="Transparent" BorderThickness="0,1,0,0" ItemsSource="{Binding collection}" MouseDoubleClick="llistview_MouseDoubleClick" Mouse

我的
列表视图
鼠标悬停
定义为
透明
,但结果是一半
透明

与选定的
相同

定义蓝色,但有两种颜色

为什么呢

  • 编辑

        <ListView Name="llistview" Background="Transparent" BorderThickness="0,1,0,0" 
              ItemsSource="{Binding collection}" MouseDoubleClick="llistview_MouseDoubleClick" 
              MouseLeftButtonDown="llistview_MouseLeftButtonDown" Margin="0,176,0,166" BorderBrush="Gainsboro" 
                  ScrollViewer.HorizontalScrollBarVisibility="Disabled">
            <ListView.ItemContainerStyle>
                <Style TargetType="{x:Type ListViewItem}">
                    <Setter Property="Foreground" Value="Gainsboro"/>
                    <Setter Property="SnapsToDevicePixels" Value="True"/>
                    <Setter Property="Padding" Value="4,1"/>
                    <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
                    <Setter Property="Background" Value="Transparent"/>
                    <Setter Property="BorderBrush" Value="Transparent"/>
                    <Setter Property="BorderThickness" Value="1"/>
                    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
                    <Setter Property="Height" Value="20" />
                    <Style.Triggers>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsMouseOver" Value="True"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Foreground" Value="White"></Setter>
                            <Setter Property="Background" Value="Transparent"/>
                            <Setter Property="BorderBrush" Value="White"/>
                        </MultiTrigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="Selector.IsSelectionActive" Value="False"/>
                                <Condition Property="IsSelected" Value="True"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" Value="#FF15669E"/>
                            <Setter Property="Foreground" Value="White"/>
                            <Setter Property="BorderBrush" Value="Transparent"/>
                            <Setter Property="BorderThickness" Value="0"/>
                        </MultiTrigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="Selector.IsSelectionActive" Value="True"/>
                                <Condition Property="IsSelected" Value="True"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" Value="#FF15669E"/>
                            <Setter Property="Foreground" Value="White"/>
                            <Setter Property="BorderBrush" Value="Transparent"/>
                            <Setter Property="BorderThickness" Value="1"/>
                        </MultiTrigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="TextElement.Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.Resources>
                <DataTemplate x:Key="MyDataTemplate">
                    <Grid Margin="-6">
                        <ProgressBar Name="progressBarColumn" Maximum="100" Value="{Binding Progress, UpdateSourceTrigger=PropertyChanged}" 
                                 Width="{Binding Path=Width, ElementName=ProgressCell}" 
                                 Height="18" Margin="0" Background="Gainsboro" Style="{StaticResource CustomProgressBar}" />
                        <TextBlock Text="{Binding Path=Value, ElementName=progressBarColumn, StringFormat={}{0}%}" VerticalAlignment="Center"
                               HorizontalAlignment="Center" FontSize="11" Foreground="White" />
                    </Grid>
                </DataTemplate>
                <DataTemplate x:Key="MyDataTemplate2">
                    <Grid Margin="-6" >
                        <Slider Name="sliderColumn" HorizontalAlignment="Left" VerticalAlignment="Center" TickPlacement="None"
                                Minimum="0" Maximum="50" Value="1" Style="{StaticResource SliderStyle}" Width="80"
                                TickFrequency="1" IsSnapToTickEnabled="True"/>
                            <TextBlock Text="{Binding Path=Value, ElementName=sliderColumn, StringFormat={}x{0}}" FontSize="11" Foreground="White" 
                                       VerticalAlignment="Center" HorizontalAlignment="Right"/>
                    </Grid>
                </DataTemplate>
                <ControlTemplate x:Key="ProgressBarTemplate">
                    <Label  HorizontalAlignment="Center" VerticalAlignment="Center" />
                </ControlTemplate>
                <Style TargetType="{x:Type TextBlock}">
                    <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=Text }"></Setter>
                </Style>
            </ListView.Resources>
            <ListView.View>
                <GridView ColumnHeaderContainerStyle="{StaticResource ListViewHeaderStyle}">
                    <GridViewColumn Width="495"  DisplayMemberBinding="{Binding File}" />
    
                    <GridViewColumn x:Name="SpeedCell"  Width="100"  CellTemplate="{StaticResource MyDataTemplate2}" />
    
                    <GridViewColumn Width="100" DisplayMemberBinding="{Binding Duration}" />
    
                    <GridViewColumn Width="100" DisplayMemberBinding="{Binding Packets, StringFormat={}{0:#,0}}" />
    
                    <GridViewColumn Width="100"  DisplayMemberBinding="{Binding PacketsSent, StringFormat={}{0:#,0}}" />
    
                    <GridViewColumn x:Name="ProgressCell"  Width="60" Header="Progress" CellTemplate="{StaticResource MyDataTemplate}" />
                </GridView>
            </ListView.View>
            <ListView.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Open Capture" FontSize="12" FontFamily="Microsoft Sans Serif"
                              Click="MenuItem_Click" VerticalAlignment="Center" Height="20">
                        <MenuItem.Icon>
                            <Image Height="18" Width="18" VerticalAlignment="Center" />
                            <!--   <Source="C:\Users\rsteinbe\Dropbox\PacketPlayer\PacketPlayer\resources\wireshark.ico" />-->
                        </MenuItem.Icon>
                    </MenuItem>
                </ContextMenu>
            </ListView.ContextMenu>
        </ListView>
    
    
    

这可不太妙。由于默认
ListViewItem
模板中有一个“UpperHighlight”
矩形
,所以有了这种额外的颜色,从外部无法访问它。所以只剩下覆盖整个模板了

首先,将以下内容添加到您的资源中:

    <Style x:Key="ListViewItemFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle RadiusY="2" RadiusX="2" Stroke="#8E6EA6F5" StrokeThickness="1"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <LinearGradientBrush x:Key="ListItemHoverFill" EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#FFF1FBFF" Offset="0"/>
        <GradientStop Color="#FFD5F1FE" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ListItemSelectedFill" EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#FFD9F4FF" Offset="0"/>
        <GradientStop Color="#FF9BDDFB" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ListItemSelectedInactiveFill" EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#FFEEEDED" Offset="0"/>
        <GradientStop Color="#FFDDDDDD" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ListItemSelectedHoverFill" EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#FFEAF9FF" Offset="0"/>
        <GradientStop Color="#FFC9EDFD" Offset="1"/>
    </LinearGradientBrush>

这可不好看。由于默认
ListViewItem
模板中有一个“UpperHighlight”
矩形
,所以有了这种额外的颜色,从外部无法访问它。所以只剩下覆盖整个模板了

首先,将以下内容添加到您的资源中:

    <Style x:Key="ListViewItemFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle RadiusY="2" RadiusX="2" Stroke="#8E6EA6F5" StrokeThickness="1"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <LinearGradientBrush x:Key="ListItemHoverFill" EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#FFF1FBFF" Offset="0"/>
        <GradientStop Color="#FFD5F1FE" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ListItemSelectedFill" EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#FFD9F4FF" Offset="0"/>
        <GradientStop Color="#FF9BDDFB" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ListItemSelectedInactiveFill" EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#FFEEEDED" Offset="0"/>
        <GradientStop Color="#FFDDDDDD" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ListItemSelectedHoverFill" EndPoint="0,1" StartPoint="0,0">
        <GradientStop Color="#FFEAF9FF" Offset="0"/>
        <GradientStop Color="#FFC9EDFD" Offset="1"/>
    </LinearGradientBrush>

可能是因为模板有两个边框或类似的东西。向我们展示您的代码,以便我们提供帮助。可能是因为模板有两个边框或类似的东西。给我们看一下你的代码,这样我们就能帮上忙了。我应该把它放在哪里?在什么下?确定我将其放在ListViewItem-->样式下,但Property=“Template”不可识别或不可访问您必须将其添加到ListViewItem样式中,但在style.Triggers之前。其他内容,即资源,您可以将其添加到ListView中。资源,但我建议您在样式和模板实际使用这些资源之前定义它们。。。StaticResource引用要求引用的资源事先在XAML中声明。我将第一个代码放在窗口中。参考资料和第二个代码:inside ListViewItem我有Style和inside Style。触发器我没有setter我应该把它确切地放在哪里?在什么下?确定我将其放在ListViewItem-->样式下,但Property=“Template”不可识别或不可访问您必须将其添加到ListViewItem样式中,但在style.Triggers之前。其他内容,即资源,您可以将其添加到ListView中。资源,但我建议您在样式和模板实际使用这些资源之前定义它们。。。StaticResource引用要求引用的资源事先在XAML中声明。我将第一个代码放在窗口内。资源和这个细节,第二个代码:inside ListViewItem我有样式和inside样式。触发器我没有Setter