You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WinUI 3中鼠标悬停发光流动效果的实现方法及同类效果咨询

WinUI 3中鼠标悬停发光流动效果的实现方法及同类效果咨询

嗨,别担心这根本不是什么傻问题!WinUI 2 Gallery里那个鼠标悬停时的流动发光焦点效果确实挺惊艳的,WinUI 3里目前没有直接内置完全一模一样的现成控件,但咱可以通过几种方式实现类似效果,或者找到替代方案:

  • 自定义控件模板实现核心效果
    这是最直接的思路:给你想要加效果的控件(比如Button、ListBoxItem这类)修改ControlTemplate,在VisualStateManager里针对PointerOver状态添加动画。
    比如可以用线性渐变刷配合动画,让发光的渐变纹理在悬停时流动起来。举个简单的XAML示例片段:

    <ControlTemplate TargetType="Button">
      <Grid>
        <Border x:Name="GlowBorder" Background="Transparent" BorderThickness="2" CornerRadius="4">
          <Border.BorderBrush>
            <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
              <GradientStop Color="#4000FFCC" Offset="0"/>
              <GradientStop Color="#0000FFCC" Offset="1"/>
            </LinearGradientBrush>
          </Border.BorderBrush>
        </Border>
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
        <VisualStateManager.VisualStateGroups>
          <VisualStateGroup x:Name="CommonStates">
            <VisualState x:Name="Normal"/>
            <VisualState x:Name="PointerOver">
              <Storyboard>
                <DoubleAnimation 
                  Storyboard.TargetName="GlowBorder"
                  Storyboard.TargetProperty="(Border.BorderBrush).(LinearGradientBrush.StartPoint)"
                  To="1,0" Duration="0:0:1.5" RepeatBehavior="Forever"/>
                <DoubleAnimation 
                  Storyboard.TargetName="GlowBorder"
                  Storyboard.TargetProperty="(Border.BorderBrush).(LinearGradientBrush.EndPoint)"
                  To="0,1" Duration="0:0:1.5" RepeatBehavior="Forever"/>
              </Storyboard>
            </VisualState>
          </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
      </Grid>
    </ControlTemplate>
    

    你可以调整渐变颜色、动画时长、流动方向,直到贴近你想要的WinUI 2效果。

  • 基于WinUI 3内置特性扩展
    WinUI 3里的RevealFocus主要是针对键盘焦点的,但咱可以把它的视觉逻辑和PointerOver状态结合起来。另外用AcrylicBrush配合透明度动画,也能做出柔和的悬浮发光感,调整TintColorOpacity在悬停时的变化值就行。

  • 参考社区现成方案
    不少开发者会在代码社区分享自定义的WinUI 3控件模板,你可以搜搜类似「WinUI3 hover reveal effect」的关键词,说不定能找到别人已经调好的现成模板,直接复用或者参考他们的实现思路。

如果想要完全复刻WinUI 2里的精细流动效果,可能需要深入一点Composition API,比如用SpriteVisualGradientStop的动态调整来做更丝滑的动画,但上面的基础方法已经能做出八九不离十的视觉体验啦。

备注:内容来源于stack exchange,提问作者Th3Suspect

火山引擎 最新活动