gpt4 book ai didi

wpf - 没有事件传递给 WPF 装饰层

转载 作者:行者123 更新时间:2023-12-04 17:05:15 26 4
gpt4 key购买 nike

我正在尝试在 WPF 中创建一个很好的“拖放区”,当某些东西被拖入主应用程序时,它会显示在装饰层中。问题是我没有从我的装饰器那里得到任何事件,即使根据文档它应该接收所有输入事件,因为它处于更高的 z 顺序。

为了调试我的问题,我创建了一个非常简单的示例,其中我有一个用户控件,其中只有一个按钮。此用户控件显示在装饰层中,但我无法单击该按钮。为什么?我做错了什么?

我的装饰类是这样构造的:

    public ShellOverlayAdorner(UIElement element, AdornerLayer adornerLayer)
:base(element)
{
_adornerLayer = adornerLayer;

_overlayView = new AdornedElement();
_overlayView.AllowDrop = true;
_adornerLayer.Add(this);
}

并在主窗口中由
    private void Window_Loaded(object sender, RoutedEventArgs e)
{
adornerLayer = AdornerLayer.GetAdornerLayer(MyTopGridWithButtonInIt);
ShellOverlayAdorner shell = new ShellOverlayAdorner(MyTopGridWithButtonInIt, adornerLayer);

}

我根本没有从我的控制中得到任何事件,即没有鼠标点击、鼠标悬停、按钮点击。我什至无法单击装饰层中的按钮。我做错了什么?

最佳答案

我不知道你是否已经尝试过:
如果您希望添加的元素对事件使用react,我认为该元素必须绑定(bind)到装饰器的可视化树。
方法是使用 视觉收藏 ,初始化到装饰器本身,或者至少,它似乎是这样工作的:

    VisualCollection visualChildren;
FrameworkElement @object;

public CustomAdorner(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];
}

这样事件被正确路由。

关于wpf - 没有事件传递给 WPF 装饰层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2943525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com