2011-10-26 99 views
0

我有一個用Adorner提供一些繪製模式的網格。見圖img:http://imgur.com/D649WC#WPF - Adorner ZIndex

我的問題是,這個裝飾(網格上的點)是分層的一切。白色的方塊是可拖動的,但現在當裝飾者在上面時,我不能拖動。我希望該圖層位於添加到網格中的每個組件的後面。有關如何設置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 ad = new MyAdorner(grid); 我會先嚐試之後開始=) –

+0

仍然同樣的結果。裝飾者在一切之上。 – Gabriel

1

容易和骯髒的方式,以確保您想要的元素總是在最前面:

聲明靜態在一個實用程序庫:

 public static int ZIndexCount; 

然後當你想要一個頂部的元素,你只需要做:

  SetZIndex(_viewbox, Util.ZIndexCount++); 

當然,如果你的應用輪次年不被打斷的ZIndexCount將回到0 ...

它的工作原理就像在我的應用魅力。

+0

他不想在所有東西上裝飾 –

+0

必須在其他控件/元素上使用SetZIndex(xxx,Util.ZIndexCount),它們會自動在裝飾器上方使用。 –

1

如果您的問題在於裝飾者正在覆蓋要操作的元素,以便它們變爲不可拖動等,請在裝飾器上設置.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/