Files
BeWoPlaner/Controls/Controls/ShadowChrome.cs
2016-06-27 01:45:38 +02:00

88 lines
3.4 KiB
C#

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace BeWo.Controls
{
public class ShadowChrome : Decorator
{
private static Brush backgroundBrush;
private static LinearGradientBrush bottomBrush;
private static RadialGradientBrush bottomLeftBrush;
private static RadialGradientBrush bottomRightBrush;
private static LinearGradientBrush rightBrush;
private static RadialGradientBrush topRightBrush;
static ShadowChrome()
{
CreateBrushes();
}
protected override void OnRender(DrawingContext drawingContext)
{
try
{
double shadowSize = 10;
if (shadowSize <= 0 || this.ActualWidth < shadowSize * 2 || this.ActualHeight < shadowSize * 2)
{
return;
}
Rect topRightRect = new Rect(this.ActualWidth, shadowSize + 10, shadowSize, shadowSize);
drawingContext.DrawRectangle(topRightBrush, null, topRightRect);
Rect rightRect = new Rect(this.ActualWidth, shadowSize * 2 + 10, shadowSize, this.ActualHeight - shadowSize * 2 - 10);
drawingContext.DrawRectangle(rightBrush, null, rightRect);
Rect bottomRightRect = new Rect(this.ActualWidth, this.ActualHeight, shadowSize, shadowSize);
drawingContext.DrawRectangle(bottomRightBrush, null, bottomRightRect);
Rect bottomRect = new Rect(shadowSize * 2 - 10, this.ActualHeight, this.ActualWidth - shadowSize * 2 + 10, shadowSize);
drawingContext.DrawRectangle(bottomBrush, null, bottomRect);
Rect bottomLeftRect = new Rect(shadowSize - 10, this.ActualHeight, shadowSize, shadowSize);
drawingContext.DrawRectangle(bottomLeftBrush, null, bottomLeftRect);
}
catch
{
}
}
private static void CreateBrushes()
{
GradientStopCollection gradient = new GradientStopCollection(2);
gradient.Add(new GradientStop(Colors.Black, 0));
gradient.Add(new GradientStop(Color.FromArgb(0, 0, 0, 0), 1));
backgroundBrush = new LinearGradientBrush(gradient, new Point(0.0, 0.0), new Point(1.0, 0.0));
rightBrush = new LinearGradientBrush(gradient, new Point(0.0, 0.0), new Point(1.0, 0.0));
bottomBrush = new LinearGradientBrush(gradient, new Point(0.0, 0.0), new Point(0.0, 1.0));
bottomRightBrush = new RadialGradientBrush(gradient);
bottomRightBrush.GradientOrigin = new Point(0.0, 0.0);
bottomRightBrush.Center = new Point(0.0, 0.0);
bottomRightBrush.RadiusX = 1.0;
bottomRightBrush.RadiusY = 1.0;
topRightBrush = new RadialGradientBrush(gradient);
topRightBrush.GradientOrigin = new Point(0.0, 1.0);
topRightBrush.Center = new Point(0.0, 1.0);
topRightBrush.RadiusX = 1.0;
topRightBrush.RadiusY = 1.0;
bottomLeftBrush = new RadialGradientBrush(gradient);
bottomLeftBrush.GradientOrigin = new Point(1.0, 0.0);
bottomLeftBrush.Center = new Point(1.0, 0.0);
bottomLeftBrush.RadiusX = 1.0;
bottomLeftBrush.RadiusY = 1.0;
}
}
}