关闭列表视图边框鼠标悬停动画
本文关键字:鼠标 悬停 动画 边框 视图 列表 | 更新日期: 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
元素。