2010-03-29 2 views
6

나는 국경을 장식 한 Adorner를 보유하고 있습니다 (아래 스크린 샷을보십시오). 그러나 Adorner의 MouseDown 이벤트는 adorner의 요소를 클릭 할 때만 발생합니다. 장식 된 요소 위에있는 adorner의 위치를 ​​클릭 할 때 MouseDown 이벤트를 발생시켜야합니다. 어떻게 할 수 있습니까? 내가 adorner에 투명 컨트롤을 추가해야합니까, 아니면 다른 방법이 있습니까? 어떤 도움을 주셔서 감사합니다! adorner에 대한 http://cid-0432ee4cfe9c26a0.skydrive.live.com/browse.aspx/%C3%96ffentlich?uc=2WPF : Adorner 히트 테스트/MouseDown 이벤트

강령 :

스크린 샷 및 VS 2008 프로젝트

내가 과거에 이런 짓을 한
class myAdorner : Adorner 
{ 
    public myAdorner(UIElement element) 
     : base(element) 
    { 
     this.MouseDown += new System.Windows.Input.MouseButtonEventHandler(myAdorner_MouseDown); 
    } 


    void myAdorner_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
    { 
     MessageBox.Show("ok"); 
    } 


    // Draws two rectangles: one in the upper-left and another one in the lower-right corner 
    protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) 
    { 
     Size size = this.AdornedElement.RenderSize; 

     Rect r1 = new Rect(0.5, 0.5, 20, 20); 
     Rect r4 = new Rect(size.Width - 20.5, size.Height - 20.5, 20, 20); 


     SolidColorBrush brush = new SolidColorBrush(Colors.AliceBlue); 
     Pen pen = new Pen(Brushes.Black, 1); 

     drawingContext.DrawRectangle(brush, pen, r1); 
     drawingContext.DrawRectangle(brush, pen, r4); 
    } 
} 

답변

3

, 난 항상 투명 용기를 사용했습니다. null 브러시를 사용하는 것만으로는 충분하지 않습니다. 실제로 # 00000000 (또는 다른 알파 0 색)을 사용해야합니다. 컨테이너가 모든 마우스 다운 이벤트를 수신 할 수 있도록 컨테이너 안의 요소에 대해 IsHitTestVisible을 해제 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다.하지만 어떻게 adorner에 브러쉬를 설정합니까? drawingcontext와 전체 rendersize 채우기? –

+0

좋습니다. (그냥 투명 사각형을 그리기 위해 drawingcontext를 사용하고 특별한 것은 없습니다) 잘 작동합니다! 대단히 감사합니다! 당신이 정말로 이것을 위해 여분의 직사각형을 필요로하는지 궁금해. 어쨌든 이제는 작동합니다. –

1

그래서 문제는 adorner가 눈에 띄는 요소가있는 곳에서 마우스 이벤트를 발생시킬 수 있다는 것입니다. 모서리에있는 두 개의 사각형 ...

당신이 좋아하는 요소 전체에서 mouseevents를 듣고 싶다면 AdornedElement.PreviewMouseDown을 등록해야합니다. 그러면 장식 된 요소에 의해 MouseDown 이벤트가 시작되기 전에 adorner에게 작업을 수행 할 수있는 기회가 주어집니다.

+0

안녕하세요 마이크, 나도 그걸 시도해 봤는데 나 한테 효과가 없어? –