【发布时间】:2011-05-31 14:05:52
【问题描述】:
我正在尝试在 wpf 中创建一个叠加层(背景变暗),类似于您可以在网络上找到的用于弹出图像的叠加层。
我希望它可以在应用程序的多个部分中重复使用,具有不同类型的内容。
这是装饰器类的构造函数的临时代码(只是为了尝试)
private readonly Grid _grid = new Grid();
public DarkOverlayAdorner(UIElement adornedElement, Object content) :
base(adornedElement)
{
_grid.Background = new SolidColorBrush(Color.FromArgb(99, 0, 0, 0));
IsHitTestVisible = true;
var visual = content as UIElement;
if (visual != null)
_grid.Children.Add(visual);
}
除了在课堂上(当然),我还有 MeasureOverride 和 ArrangeOverride 的 ovverrides 来为装饰者提供被装饰元素的正确大小、GetVisualChild 和 VisualChildCount...
这里的问题是装饰器被正确显示,但没有事件或行为被应用到被装饰的元素上。例如:
AdornerLayer layer = AdornerLayer.GetAdornerLayer(textBoxProva);
layer.Add(new DarkOverlayAdorner(textBoxProva, new Button{Content = "prova"}));
此处显示了按钮,但我无法单击该按钮,并且对按钮鼠标悬停没有任何影响。 我仍然无法弄清楚问题所在。
【问题讨论】:
标签: wpf adorner adornerlayer