2014-07-01 4 views
1

Adorner 레이어 아래의 버튼을 클릭하고 싶습니다. 물론, 시각적 트리에서 Adorner는 컨트롤과 다른 지점입니다. Not able to handle PreviewMouseDownAdorner 레이어 아래에서 이벤트를 발생시키는 방법

adorner 레이어에서 이벤트를 시작하려면 어떻게해야합니까?

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); 
    } 
} 

답변

1

테스트 할 수있는 Adorner가 필요하지 않은 경우 GrayAdorner의 IsHitTestVisible 속성을 false로 설정하십시오. 마우스 이벤트는 Adorner를 무시하고 밑의 Button으로 전달합니다.

+0

감사합니다. sjw. Adorner 클래스 생성자에 "IsHitTestVisible = False"를 추가합니다. 방금 끝났어. 대단히 감사합니다!. –