WPF行为

背景:实现按钮鼠标移动到上方有点交互效果或变一下有阴影。这样使用触发器就行了,但是如果是每个控件都有效果的话使用行为更加合适

1、下载NuGet包:Microsoft.xaml.behavior.wpf

2、创建行为类EffectBehavior,对Behavior进行重写

public class EffectBehavior : Behavior<FrameworkElement>
{
    protected override void OnAttached()
    {
        base.OnAttached();

        // 这个时候的AssociatedObject就是FrameworkElement,因为泛型传过去了
        AssociatedObject.MouseMove += AssociatedObject_MouseMove;      // 鼠标进入
        AssociatedObject.MouseLeave += AssociatedObject_MouseLeave;
    }

    private void AssociatedObject_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        var element = sender as FrameworkElement;
        // 设置效果
        element.Effect = (Effect)new DropShadowEffect() { Color = Colors.Transparent, ShadowDepth = 0 };
    }

    private void AssociatedObject_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
    {
        var element = sender as FrameworkElement;

        element.Effect = (Effect)new DropShadowEffect() {  Color = Colors.Red, ShadowDepth = 0 };
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();

        AssociatedObject.MouseMove -= AssociatedObject_MouseMove;      // 鼠标进入
        AssociatedObject.MouseLeave -= AssociatedObject_MouseLeave;
    }
}

        -- 就是简单加上鼠标移动到控件上面加上阴影效果

        -- 抽象类Behavior的泛型传入的是FrameworkElement是因为,大多数控件都是由它派生出来的,具体可以查看这个文章的WPF控件结构:https://www.cnblogs.com/zh7791/p/11372473.html

3、在xaml中引入NuGet的命名空间

4、将自己重写的behavior给控件使用

<StackPanel>

    <TextBox Width="100" Height="30" Margin="40">
        <i:Interaction.Behaviors>
            <local:EffectBehavior/>
        </i:Interaction.Behaviors>
    </TextBox>

    <Button Width="100" Height="30" Margin="40">
        <i:Interaction.Behaviors>
            <local:EffectBehavior/>
        </i:Interaction.Behaviors>
    </Button>
</StackPanel>

总结:对Behavior进行重写罢了

同样也是这个NuGet的使用

WPF实现更加灵活绑定复杂Command(使用Microsoft XAML Behaviors 库)_wpf 绑定复杂类型-CSDN博客

相关推荐

  1. WPF行为

    2024-01-23 08:08:02       55 阅读
  2. 网络安全-WAF如何判断是攻击行为

    2024-01-23 08:08:02       62 阅读
  3. WPF StackPanel

    2024-01-23 08:08:02       60 阅读
  4. WPF Border

    2024-01-23 08:08:02       58 阅读
  5. WPF RelativeSource

    2024-01-23 08:08:02       58 阅读
  6. WPF Grid

    2024-01-23 08:08:02       58 阅读
  7. WPF DataGrid

    2024-01-23 08:08:02       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-23 08:08:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-23 08:08:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-23 08:08:02       87 阅读
  4. Python语言-面向对象

    2024-01-23 08:08:02       96 阅读

热门阅读

  1. SpringBoot 统计更多Api接口日志信息

    2024-01-23 08:08:02       50 阅读
  2. 软件测试中的非功能测试包括什么?

    2024-01-23 08:08:02       57 阅读
  3. 单点安装3.6.23_ubuntu18.04

    2024-01-23 08:08:02       51 阅读
  4. 负载均衡-Feign

    2024-01-23 08:08:02       60 阅读
  5. ubuntu怎么查看有几个用户

    2024-01-23 08:08:02       60 阅读
  6. IntelliJ IDEA 如何配置git?

    2024-01-23 08:08:02       58 阅读
  7. 开发安全之Dangerous File Inclusion

    2024-01-23 08:08:02       47 阅读
  8. svn checkout 无法使用,没有响应 svn: E170013

    2024-01-23 08:08:02       49 阅读
  9. 【一】从零到1设计一个丧葬行业小程序

    2024-01-23 08:08:02       49 阅读
  10. Vector容器的详细介绍

    2024-01-23 08:08:02       47 阅读
  11. C++提高编程——模板

    2024-01-23 08:08:02       40 阅读
  12. mysql 主从配置流程

    2024-01-23 08:08:02       51 阅读