关闭列表视图边框鼠标悬停动画

本文关键字:鼠标 悬停 动画 边框 视图 列表 | 更新日期: 2023-09-27 18:31:51

ListView 的默认样式会在将鼠标悬停在控件上时将边框颜色设置为浅蓝色。有没有办法在不替换整个控件模板的情况下关闭它?

我试过了

<ListView>
    <ListView.Style>
        <Style TargetType="ListView">
            <Setter Property="BorderBrush" Value="Green"/>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">       
                    <Setter Property="BorderBrush" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListView.Style>
</ListView>

这将产生一个绿色边框,当您将鼠标悬停在上面时,该边框会短暂变为红色,然后淡入浅蓝色。默认动画优先。

我是否错过了一些简单的东西,或者是时候覆盖模板了?

关闭列表视图边框鼠标悬停动画

您必须覆盖ControlTemplate,因为默认使用ListBoxChrome元素来创建您看到的效果。 ListBoxChrome鼠标结束时忽略 BorderBrush 属性,由其RenderMouseOver属性确定。

如果需要,您仍然可以使用 ListBoxChrome,您只需删除 RenderMouseOver 属性即可。假设您使用的是GridView您将使用:

xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
...
<Style x:Key="{x:Static GridView.GridViewStyleKey}"
       TargetType="{x:Type ListView}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListView}">
                <theme:ListBoxChrome Name="Bd"
                                     BorderThickness="{TemplateBinding BorderThickness}"
                                     BorderBrush="{TemplateBinding BorderBrush}"
                                     Background="{TemplateBinding Background}"
                                     RenderFocused="{TemplateBinding IsKeyboardFocusWithin}"
                                     SnapsToDevicePixels="true">
                    <ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}"
                                  Padding="{TemplateBinding Padding}">
                        <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                    </ScrollViewer>
                </theme:ListBoxChrome>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsGrouping"
                             Value="true">
                        <Setter Property="ScrollViewer.CanContentScroll"
                                Value="false"/>
                    </Trigger>
                    <Trigger Property="IsEnabled"
                             Value="false">
                        <Setter TargetName="Bd"
                                Property="Background"
                                Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

如果要删除焦点外观,则最好仅将ListBoxChrome替换为Border元素。