private Geometry CreateRoundedRectangleGeometry(Rect rect, int radiusX, int radiusY)
{
StreamGeometry streamGeometry = new StreamGeometry();
streamGeometry.FillRule = FillRule.Nonzero;
using (StreamGeometryContext streamGeometryContext = streamGeometry.Open())
{
streamGeometryContext.BeginFigure(new Point(rect.X, rect.Y + radiusY), true, true);
streamGeometryContext.QuadraticBezierTo(rect.Location, new Point(rect.X + radiusX, rect.Y), true, false);
streamGeometryContext.LineTo(new Point(rect.X + rect.Width - radiusX, rect.Y), true, false);
streamGeometryContext.QuadraticBezierTo(new Point(rect.X + rect.Width, rect.Y), new Point(rect.X + rect.Width, rect.Y + radiusY), true, false);
streamGeometryContext.LineTo(new Point(rect.X + rect.Width, rect.Y + rect.Height - radiusY), true, false);
streamGeometryContext.QuadraticBezierTo(new Point(rect.X + rect.Width, rect.Y + rect.Height), new Point(rect.X + rect.Width - radiusX, rect.Y + rect.Height), true, false);
streamGeometryContext.LineTo(new Point(rect.X + radiusX, rect.Y + rect.Height), true, false);
streamGeometryContext.QuadraticBezierTo(new Point(rect.X, rect.Y + rect.Height), new Point(rect.X, rect.Y + rect.Height - radiusY), true, false);
}
return streamGeometry;
}