Добавить эффект визуальной
Попробуйте что-то вроде этого
public class MyControl: Control
{
private Rect rect = new Rect(100, 100, 200, 200);
protected override void OnRender(DrawingContext drawingContext)
{
var r = new Rect(new Point(rect.TopRight.X + 20, rect.TopRight.Y),
new Size(130, rect.Height));
var brush = new SolidColorBrush(Color.FromRgb(255, 246, 178));
DropShadowEffect effect = new DropShadowEffect();
effect = new DropShadowEffect {Color = Colors.Gainsboro, Direction = 30};
this.Effect = effect;
drawingContext.DrawRoundedRectangle(brush, null, r, 3, 3);
base.OnRender(drawingContext);
}
}
Это дает мне:
EDIT
Если у вас нет элемента интерфейса для присоединения эффекта, вам нужно сделать тень самостоятельно. Просто добавьте еще один прямоугольник под своим основным, с некоторой градиентной кистью, которая станет прозрачной.
protected override void OnRender(DrawingContext drawingContext)
{
var r = new Rect(new Point(rect.TopRight.X + 20, rect.TopRight.Y),
new Size(130, rect.Height));
var r2 = new Rect(new Point(rect.TopRight.X + 25, rect.TopRight.Y+5),
new Size(130, rect.Height));
var brush = new SolidColorBrush(Color.FromRgb(255, 246, 178));
var gradientBrush = new LinearGradientBrush(Colors.Black, Colors.Gray, 30);
drawingContext.DrawRoundedRectangle(gradientBrush, null, r2, 3, 3);
drawingContext.DrawRoundedRectangle(brush, null, r, 3, 3);
base.OnRender(drawingContext);
}
Это даст вам что-то вроде этого
Спасибо за ответ Себастьян. Я думаю, что мой вопрос неполный. Ваш ответ работает, потому что рендеринг происходит на UIElement, у которого есть поле Effect. Для моего случая я представляю этот прямоугольник в текстовом поле. (в основном фоновый рендерер на AvalonEdit). Таким образом, для него нет поля эффектов. Как я могу отобразить этот элемент управления? Какие-либо предложения ? – ssarangi
Я отредактировал ответ, возможно, это предложение поможет –
Perfect !! Это работает Себастьян – ssarangi