WPF 用Clip属性实现蒙板特效

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF 用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;
? ? ? ? }
? ? }


效果如下:

技术分享图片

源码



































































以上是关于WPF 用Clip属性实现蒙板特效的主要内容,如果未能解决你的问题,请参考以下文章

WPF -- 窗口Clip+Effect效果

在WPF中使用另一个控件作为不透明蒙板?

WPF 实现蒙板控件

WPF蒙板弹窗

WPF: RenderTransform特效

WPF: RenderTransform特效