我想点击Adorner层下的按钮。当然,在可视树中,Adorner与控件是不同的分支。Not able to handle PreviewMouseDown
如何在装饰层下触发事件?
xaml在下面。
<Canvas Name="_canvas" Width="100" Height="100">
<Button Name="_btn" Width="120" Height="120"/>
</Canvas>代码隐藏在下面。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Loaded += delegate { AdornerLayer.GetAdornerLayer(_canvas).Add(new GrayAdorner(_canvas)); };
_btn.Click += (sender, e) => MessageBox.Show("Mouse Click is working.");
}
}
public class GrayAdorner : Adorner
{
public GrayAdorner(UIElement element)
: base(element) { }
protected override void OnRender(DrawingContext drawingContext)
{
drawingContext.DrawRectangle(Brushes.Gray, null, new Rect(new Point(0, 0), DesiredSize));
base.OnRender(drawingContext);
}
}发布于 2014-07-01 03:57:41
如果不需要Adorner被测试,请将GrayAdorner的GrayAdorner属性设置为false。鼠标事件将忽略Adorner并传递到下面的Button。
发布于 2020-11-21 15:31:39
对于带有子控件的Adorner (需要为IsHitTestVisible =True)尝试这样做:
private void AdornerChildMouseDown(object sender, MouseButtonEventArgs e)
{
Adorner parentAdorner = VisualTreeHelper.GetParent(sender as DependencyObject) as Adorner;
Trace.WriteLine("Adorner Child clicked");
parentAdorner.Visibility = Visibility.Collapsed;
Task.Factory.StartNew(() =>
{
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
UIElement underMouse = Mouse.DirectlyOver as UIElement;
if (underMouse != null) underMouse.RaiseEvent(e);
}));
});
}https://stackoverflow.com/questions/24502160
复制相似问题