2010-11-29 7 views
1

MoveAdorner를 활성화하거나 표시하는 방법에 대해 조금 고민하고 있습니다.WPF Adorner를 표시하는 방법

나는 다음을 시도하지만 성공하지 못한다 : 장식 될 요소에서 나는 Adorner를 GotFocus 이벤트에 추가한다. 그것만으로는 충분하지 않았으므로 InvalidateVisual()에 대한 호출을 추가했습니다. 그러나 아무 일도 일어나지 않습니다. 그 장식자를 보이게하는 방법에 대한 암시를 누군가 있습니까?

protected void MyUIElement_GotFocus(object sender, RoutedEventArgs e) 
    { 
     AdornerLayer layer = AdornerLayer.GetAdornerLayer(this); 
     layer.Add(new MoveAdorner(this)); 
     layer.InvalidateVisual(); 
    } 

설명 : 장식 된 요소는 사용자 지정 ItemsControl의 파생 패널 내에있는 컨트롤입니다.

MoveAdornerAdorner에서 파생되었으며 컨트롤의 상단과 하단에 두 개의 상자를 그립니다. 종류

가있어/분실 포커스 이벤트가이 상황에 매우 좋지 않다 사실

답변

0

을 간주한다. 포커스를 얻을 수있는 추가 입력 컨트롤을 보여주고 싶다고 상상해보십시오.

이제 LeftButtonUpEvent에 연결하고 다른 모든 광고자를 숨기고 현재 요소의 Adorner 만 표시합니다.

또한 adorner는 요청에 따라 필요할 때 추가됩니다. 이 메소드는 "장식"될 컨트롤에 정의됩니다.

private void ShowAdorner() { 
    Owner.HideAppointmentAdorners(); 

    AdornerLayer layer = AdornerLayer.GetAdornerLayer(this); 

    Adorner []adorners = layer.GetAdorners(this); 

    if(adorners == null || adorners.Length == 0) 
    { 
     layer.Add(new ResizingAdorner(this) { Visibility = System.Windows.Visibility.Visible }); 
    } 
    else 
    { 
     for(int i = 0; i < adorners.Length; i++) 
     { 
      adorners [ i ].Visibility = System.Windows.Visibility.Visible; 
     } 
    } 

}

관련 문제