2011-10-26 5 views
0

저는 그려진 패턴을 제공하기 위해 Adorner가있는 Grid가 있습니다. img : http://imgur.com/D649WC# WPF - Adorner ZIndex

내 문제는이 Adorner (격자의 점들)가 모든 것 위에 겹쳐져 있다는 것입니다. 흰색 사각형은 드래그 가능하지만 Adorner가 위에있을 때 드래그 할 수 없습니다. 그리드에 추가 된 모든 구성 요소 뒤에 레이어를 배치하고 싶습니다. ZIndex 설정 방법에 대한 제안 사항은 무엇입니까?

감사합니다. 아래

코드 :

MyAdorner ad = new MyAdorner(grid); 
    AdornerLayer adLayer = AdornerLayer.GetAdornerLayer(grid); 
    adLayer.Add(ad); 

은 내 버튼을 누르고이 그리드에 MyAdorner을 추가하고있다. MyAdorner는 다음과 같습니다.

public MyAdorner(Grid adornedGrid) 
: base(adornedGrid) { 
Height = adornedGrid.Height; 
Width = adornedGrid.Width; 
brush = new VisualBrush(); 
brush.Stretch = Stretch.Fill; 
brush.TileMode = TileMode.Tile; 
brush.Viewport = new Rect(0, 0, SnapDistance, SnapDistance); 
brush.ViewportUnits = BrushMappingMode.Absolute; 
brush.Viewbox = new Rect(0, 0, SnapDistance, SnapDistance); 
brush.ViewboxUnits = BrushMappingMode.Absolute; 
ellipse = new Ellipse() { Fill = new SolidColorBrush(Colors.Blue), Width = 2, Height = 2 }; 
brush.Visual = ellipse; 
} 

protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) { 
Pen renderPen = new Pen(new SolidColorBrush(Colors.Black), 0); 
drawingContext.DrawRectangle(brush, renderPen, new Rect(new Point(0, 0), AdornedElement.DesiredSize)); 
} 
+0

참조하십시오. – ChrisF

+0

코드의 상당 부분을 알면 어떤 부분을 알아야합니까? – Gabriel

+0

문제를 나타내는 가장 간단한 코드입니다. – ChrisF

답변

0

이게 당신이 원하는 것입니까?

Panel.SetZIndex(ad, 20) 

프레임 워크의 연결된 속성은 일반적으로 프레임 워크의 고정 된 속성을 유지하는 UIElement의 정적 메서드와 동일합니다.

편집 :
가능한 대안 : - make your own Panel

+0

어디에 넣어야할지 모르겠다. 나에게 계몽해라! :) – Gabriel

+0

MyAdorner 광고 = 새 MyAdorner (눈금); 그 직후에 시도해 보겠습니다. =) –

+0

여전히 같은 결과입니다. Adorner는 모든 것 위에 있습니다. – Gabriel

1

용이하고 원하는 요소가 항상 맨 위에 있는지 확인하는 더러운 방법 :

는 백분율 라이브러리에 정적을 선언 :

 public static int ZIndexCount; 

다음 상단에있는 요소를 원할 때 :

물론
  SetZIndex(_viewbox, Util.ZIndexCount++); 

, 응용 프로그램이 ZIndexCount 0으로 돌아갑니다 중단하지 않고 오년 실행하는 경우 ...

그것은 내 응용 프로그램의 매력처럼 작동합니다.

+0

그는 adorner를 모든것 위에 놓기를 원하지 않습니다. –

+0

SetZIndex (xxx, Util.ZIndexCount)는 다른 컨트롤/요소에 사용되어야하며 자동으로 adorner보다 위에있게됩니다. –

1

adorner가 조작하려는 요소를 덮어서 드래그 할 수 없게되는 등의 문제가있는 경우 adorner에 .IsHitTestVisible = False을 설정하십시오.

반투명 값으로 아도너의 불투명도를 설정하여 원하는 경우 배경을 볼 수도 있습니다.

0

나는 꽤 오래되었지만 어쨌든 시도해 보았다고 생각합니다. 새로운 레벨의 AdornerDecorator를 시각적 트리 계층 구조에 추가하여 컨트롤을 올바른 수준으로 렌더링 할 수 있습니다. 기본적으로 트리의 루트는 AdornerDecorator를 제공하지만 원하는만큼 추가 할 수 있으며 추가 한 구성 요소가 렌더링됩니다. 자세한 내용은 - 당신은 당신의 코드를 게시 할 수 여기

<Grid> 
    <AdornerDecorator> 
     ...your Adorners render here 
    </AdornerDecorator> 
</Grid> 

https://wangmo.wordpress.com/2008/10/19/relations-between-adorner-adornerlayer-and-adornerdecorator/