我想单击“ 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);
    }
}

最佳答案

如果您不需要Adorner可以进行命中测试,请将GrayAdorner的IsHitTestVisible属性设置为false。鼠标事件将忽略Adorner,并传递到下面的Button。

关于c# - 如何在Adorner层下触发事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24502160/

10-12 02:34