我正在尝试在 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"}));
此处显示了按钮,但我无法单击该按钮,并且对按钮鼠标悬停没有任何影响。我仍然无法弄清楚问题所在。