Wpf装饰程序不响应交互
Wpf装饰程序不响应交互,wpf,adorner,adornerlayer,Wpf,Adorner,Adornerlayer,我正在尝试在wpf中创建一个覆盖(背景变暗),类似于您可以在web上找到的用于弹出图像的覆盖。 我希望它能够在应用程序的多个部分中重用,并具有不同类型的内容 这是adorner类的构造函数的临时代码(仅供尝试) 除此之外(当然),我还有MeasureOverride和ArrangeOverride的ovverrides,用于为装饰器提供装饰元素、GetVisualChild和VisualChildCount的正确大小 这里的问题是正确显示了装饰器,但没有在装饰元素上应用任何事件或行为。例如: A
我正在尝试在wpf中创建一个覆盖(背景变暗),类似于您可以在web上找到的用于弹出图像的覆盖。 我希望它能够在应用程序的多个部分中重用,并具有不同类型的内容 这是adorner类的构造函数的临时代码(仅供尝试) 除此之外(当然),我还有MeasureOverride和ArrangeOverride的ovverrides,用于为装饰器提供装饰元素、GetVisualChild和VisualChildCount的正确大小 这里的问题是正确显示了装饰器,但没有在装饰元素上应用任何事件或行为。例如:
AdornerLayer layer = AdornerLayer.GetAdornerLayer(textBoxProva);
layer.Add(new DarkOverlayAdorner(textBoxProva, new Button{Content = "prova"}));
此处显示的按钮,但我无法单击该按钮,并且不会对按钮鼠标上方产生任何影响。
我仍然无法找出问题所在。您可能需要查看中的控件。它是一个弹出具有模式背景效果的窗口的控件,您可以指定要放在窗口内的内容。好的,我花了很多时间试图找出问题所在。 最后我找到了解决办法: 如果您希望添加元素以响应事件,我认为该元素必须绑定到装饰器的可视树。 方法是使用一个可视化集合,初始化到装饰器本身:
VisualCollection visualChildren;
FrameworkElement @object;
public DarkOverlayAdorner(UIElement adornedElement) :
base(adornedElement)
{
visualChildren = new VisualCollection(this);
@object = new Button {Content = "prova"};
visualChildren.Add(@object);
}
protected override Visual GetVisualChild(int index)
{
return visualChildren[index];
}
通过这种方式,事件被正确地路由。谢谢,这可能是一个更好的解决方案(而且是免费的),但与此同时,我更愿意了解我的问题是什么
VisualCollection visualChildren;
FrameworkElement @object;
public DarkOverlayAdorner(UIElement adornedElement) :
base(adornedElement)
{
visualChildren = new VisualCollection(this);
@object = new Button {Content = "prova"};
visualChildren.Add(@object);
}
protected override Visual GetVisualChild(int index)
{
return visualChildren[index];
}