using System.Windows;
using System.Windows.Documents;
using System.Windows.Media;
public class GreenOverlayAdorner : Adorner
{
public GreenOverlayAdorner(UIElement adornedElement)
: base(adornedElement)
{
}
protected override void OnRender(DrawingContext drawingContext)
{
Rect adornedElementRect = new Rect(this.AdornedElement.RenderSize);
// Draw semi-transparent green background
Brush brush = new SolidColorBrush(Color.FromArgb(128, 0, 255, 0)); // 50% transparent green
drawingContext.DrawRectangle(brush, null, adornedElementRect);
// Draw solid green line
Pen pen = new Pen(Brushes.Green, 2);
drawingContext.DrawLine(pen, adornedElementRect.TopLeft, adornedElementRect.BottomRight);
}
}
6条答案
按热度按时间zsbz8rwp1#
如果您在布局中使用
Canvas
或Grid
,则给予要放在顶部的控件更高的ZIndex
。从MSDN:
字符串
如果您没有指定
ZIndex
,面板的子项将按照指定的顺序呈现(即最后一个在顶部)。如果你想做一些更复杂的事情,你可以看看
ChildWindow
是如何在Silverlight中实现的。它在整个RootVisual
上覆盖了一个透明的背景和弹出窗口。hzbexzde2#
Robert Rossney有一个很好的解决方案。这是我过去使用过的另一种解决方案,它将“Overlay”与其他内容分开。这个解决方案利用附加属性
Panel.ZIndex
将“Overlay”放置在其他所有内容的顶部。您可以在代码中设置“Overlay”的可见性或使用DataTrigger
。字符串
kh212irz3#
网格中同一单元格中的控件是从后到前呈现的。因此,将一个控件放在另一个控件之上的一个简单方法是将它们放在同一单元格中。
下面是一个有用的例子,它弹出一个面板,在执行长时间运行的任务时(即
BusyMessage
绑定属性不为null时),该面板会禁用视图(即用户控件)中的所有内容,并显示忙碌消息:字符串
hk8txs484#
把你想要的控件放在xaml代码的最前面。
字符串
kwvwclae5#
这是WPF中Adorners的一个常见函数。装饰器通常出现在所有其他控件之上,但其他提到z顺序的答案可能更适合您的情况。
范例:
在控件的构造函数中:
字符串
GreenOverlayAdorner.cs
型
qlzsbp2j6#
字符串