在 MouseMove 事件中获取鼠标距离窗口中心的距离,并根据这一数据设置窗口背景色的深浅。
using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
namespace TestProject.Windows
{
public class VaryTheBackground: Window
{
SolidColorBrush brush = new SolidColorBrush(Colors.Black);
public VaryTheBackground()
{
this.Title = "Vary the Background";
this.Width = 384;
this.Height = 384;
this.Background = brush;
}
protected override void OnMouseMove(MouseEventArgs e)
{
double width = this.ActualWidth
- 2 * SystemParameters.ResizeFrameVerticalBorderWidth;
double height = this.ActualHeight
- 2 * SystemParameters.ResizeFrameHorizontalBorderHeight
- SystemParameters.CaptionHeight;
Point ptMouse = e.GetPosition(this);
Point ptCenter = new Point(width / 2, height / 2);
Vector vectMouse = ptMouse - ptCenter;
double angle = Math.Atan2(vectMouse.Y, vectMouse.X);
Vector vectEllipse = new Vector(
width / 2 * Math.Cos(angle),
height / 2 * Math.Sin(angle));
byte byLevel = (byte)(255 * (1 - Math.Min(1, vectMouse.Length / vectEllipse.Length)));
Color clr = brush.Color;
clr.R = clr.G = clr.B = byLevel;
brush.Color = clr;
}
}
}
摘自:《Windows Presentation Foundation 程序设计指南》 【美】Charles Petzold