【发布时间】:2010-05-31 12:32:03
【问题描述】:
我正在尝试在 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);
}
我没有从我的控件中得到任何事件,即没有鼠标点击、鼠标悬停、按钮点击。我什至无法单击装饰层中的按钮。我做错了什么?
【问题讨论】:
-
它对我来说工作正常...你确定你没有在你的装饰器上将 IsHitTestVisible 设置为 false 吗?
-
嗯.. 奇怪,因为我为我创建的所有测试项目都得到了这个。不,我没有将 IsHitTestVisible 设置为 false。我已经测试将其设置为 true 和 false 以获得更改,但没有任何反应。