public class TransparentImage : Image { protected override HitTestResult HitTestCore( PointHitTestParameters hitTestParameters) { // Get value of current pixel var source = (BitmapSource)Source; var x = (int)(hitTestParameters.HitPoint.X / ActualWidth * source.PixelWidth); var y = (int)(hitTestParameters.HitPoint.Y / ActualHeight * source.PixelHeight); var pixels = new byte[4]; source.CopyPixels(new Int32Rect(x, y, 1, 1), pixels, 4, 0); // Check alpha channel if (pixels[3] < 10) { return new PointHitTestResult(this, hitTestParameters.HitPoint); } else { return null; } } protected override GeometryHitTestResult HitTestCore( GeometryHitTestParameters hitTestParameters) { // Do something similar here, possibly checking every pixel within // the hitTestParameters.HitGeometry.Bounds rectangle return base.HitTestCore(hitTestParameters); } }
Michal,我不会创建一个真正的“按钮”。 只需进行混合,将图像作为图像画笔变成矩形,右键单击使其成为按钮。 如果您使用Blend 4,这将在Visual State Manager中生成相应的状态。 您可以将鼠标hover,按下等,看起来像一个按钮。 甚至是残疾状态。