WPF 用Clip属性实现蒙板特效

简介: 原文:WPF 用Clip属性实现蒙板特效 上一篇,已简单介绍Clip属性的用法,这一篇用它来实现简单蒙板功能,很简单,直接上代码                                ...
原文: WPF 用Clip属性实现蒙板特效

上一篇,已简单介绍Clip属性的用法,这一篇用它来实现简单蒙板功能,很简单,直接上代码

<Window x:Class="擦除效果.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="537" Width="866" MouseMove="canvas_MouseMove" MouseDown="Window_MouseDown" MouseUp="Window_MouseUp">
    <Grid>


        <Rectangle Height="100" HorizontalAlignment="Left" Margin="164,92,0,0" Name="rectangle1" Stroke="Black" VerticalAlignment="Top" Width="200" Fill="Lime" />
        <Button Content="Button" Height="83" HorizontalAlignment="Left" Margin="526,109,0,0" Name="button1" VerticalAlignment="Top" Width="115" Click="button1_Click" />
        <Grid x:Name="grid"  Background="#88FFFFFF" ></Grid>
    </Grid>


    <Window.Background>
        <ImageBrush ImageSource="/擦除效果;component/Images/s01.jpg" />
    </Window.Background>
</Window>


后台:

    public partial class MainWindow : Window
    {
        private bool isDown = false;
        public MainWindow()
        {
            InitializeComponent();
            RectangleGeometry rg = new RectangleGeometry();
            rg.Rect = new Rect(0, 0, this.Width, this.Height);
            gridGeometry = Geometry.Combine(gridGeometry, rg, GeometryCombineMode.Union, null);
            grid.Clip = gridGeometry;
        }
        PathGeometry gridGeometry = new PathGeometry();
        private void canvas_MouseMove(object sender, MouseEventArgs e)
        {
            if (isDown)
            {
                EllipseGeometry rg = new EllipseGeometry();
                rg.Center = e.GetPosition(this);
                rg.RadiusX = 50;
                rg.RadiusY = 50;
                //排除几何图形
                gridGeometry = Geometry.Combine(gridGeometry, rg, GeometryCombineMode.Exclude, null);
                grid.Clip = gridGeometry;
            }
        }


        private void button1_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("OK!");
        }


        private void Window_MouseDown(object sender, MouseButtonEventArgs e)
        {
            isDown = true;
        }


        private void Window_MouseUp(object sender, MouseButtonEventArgs e)
        {
            isDown = false;
        }
    }


效果如下:

源码


目录
相关文章
|
C#
WPF 界面实现多语言支持 中英文切换 动态加载资源字典
原文:WPF 界面实现多语言支持 中英文切换 动态加载资源字典 1、使用资源字典,首先新建两个字典文件en-us.xaml、zh-cn.xaml。定义中英文的字符串在这里面【注意:添加xmlns:s="clr-namespace:System;assembly=mscorlib】 zh-cn.
2901 0
|
6月前
|
C#
2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>
2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>
20 0
|
6月前
|
存储 开发框架 .NET
2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>
2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>
22 0
|
9月前
|
C#
WPF属性---重复样式和触发器
WPF属性---重复样式和触发器
70 0
WPF项目中不支持 ResizingPanel,未在类型“ResizingPanel”中找到可附加的属性“ResizeWidth”
WPF项目中不支持 ResizingPanel,未在类型“ResizingPanel”中找到可附加的属性“ResizeWidth”
|
IDE C# 开发工具
WPF钟表效果实现
中WPF中的RotateTransform实现UI元素的旋转,并模拟钟表的秒针、分针和时针。
1126 0
WPF钟表效果实现
|
IDE 编译器 C#
WPF实现强大的动态公式计算
数据库可以定义表不同列之间的计算公式,进行自动公式计算,但如何实现行上的动态公式计算呢?行由于可以动态扩展,在某些应用场景下将能很好的解决实际问题。本文就探讨一下如何在WPF中实现一种基于行字段的动态公式计算。
991 0
WPF实现强大的动态公式计算
|
网络协议 C# 移动开发
C# WPF上位机实现和下位机TCP通讯
C# WPF上位机实现和下位机TCP通讯下位机使用北京大华程控电源DH1766-1,上位机使用WPF。实现了电压电流实时采集,曲线显示。上午在公司调试成功,手头没有程控电源,使用TCP服务端模拟。昨天写的TCP服务端正好排上用场。
2337 0
|
C#
WPF中一个控件绑定另一个控件的属性
原文:WPF中一个控件绑定另一个控件的属性 如同一个Grid中的一个按钮根据另一个按钮的显示与否作出不同的响应: 绑定的时候通过ElementName来指定控件               ...
1801 0
|
C#
WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性
原文:WPF 使用依赖属性(DependencyProperty) 定义用户控件中的Image Source属性 如果你要自定义一个图片按钮控件,那么如何在主窗体绑定这个控件上图片的Source呢? 我向大家介绍一个用 依赖属性(DependencyProperty) 实现的方法。
2437 0