2009-03-27 25 views
1

Ich versuche zIndexing arbeiten an einem benutzerdefinierten Usercontrol zu bekommen, aber er streift die Unterseite der Kontrolle, wenn es in einem TabControl erscheint wie folgt:WPF zIndex in TabControl

Demo of Control

Das ist mein XAML

<StackPanel Panel.ZIndex="1"> 
    <TabControl Name="TabCtrlMain" Panel.ZIndex="2"> 
     <TabItem Name="TabItmOrdrLst" Visibility="Collapsed" Panel.ZIndex="3" > 
      <StackPanel Panel.ZIndex="4"> 
       <ri:OrderList x:Name="OrderList" Panel.ZIndex="5" /> 
       <Rectangle Fill="Orange" Height="80" Width="300" /> 
      </StackPanel> 
     </TabItem> 
    </TabControl> 
    <Rectangle Fill="Blue" Height="80" Width="300" /> 
</StackPanel> 

Antwort

2

Aus dem Bild, das Sie gepostet haben, sieht es so aus, als hätte das Benutzersteuerelement eine Art simuliertes Popup-Fenster (das Notes-Fenster), das ein Kind des UserControls ist. Wenn dies der Fall ist, könnte dies die Beschneidung erklären, wenn das Notizenfenster nicht Teil der Layoutberechnungen der Bestellliste ist. Erwägen Sie, das Notes-Steuerelement zu einem echten Popup-Fenster zu machen, oder verwenden Sie etwas wie einen Expander, der, wenn er erweitert wird, seinem übergeordneten Element (dem UserControl) mitteilen kann, dass mehr Platz zum Rendern benötigt wird.

Es ist erwähnenswert, dass Container wie StackPanel ihre untergeordneten Steuerelemente immer "stapeln" (daher der Name), was bedeutet, dass sich untergeordnete Steuerelemente niemals überschneiden. Aus diesem Grund ist es sinnlos, den Z-Index auf irgendeinen davon zu setzen. Ich würde vorschlagen, Grid oder Canvas als Container zu verwenden, mit denen Sie die Kontrollen überlappen möchten, und dann ihren Z-Index einstellen. Denken Sie auch daran, dass der Z-Index nur im Kontext des unmittelbaren Elternelements des Steuerelements relevant ist. Daher wird die Angabe aller Steuerelemente Panel.Zindex = "n" wie im obigen Beispiel nicht funktionieren.

Von dem, was ich sehen kann, ist dieses Problem ein Layout-Problem, kein Z-Index-Problem.

+0

Ja, es war ein Layout-Problem. Ich habe es in einen Griff verwandelt und die Tabcontrol entfernt und es funktioniert jetzt gut. – Alex

2

In Ihrem Beispiel ist unklar, was Sie von den ZIndex erwarten. ZIndex wirkt sich nur auf die relative Stapelung von Elementen im selben Container aus, sodass keine der ZIndex-Einstellungen, die Sie in diesem Beispiel haben, Auswirkungen hat. Die Bestellliste wird unabhängig von den relativen Werten von ZIndex zwischen ihr und einem ihrer untergeordneten Elemente vom TabItem abgeschnitten.

+0

Das erklärt alles, danke –

1

Vielleicht möchten Sie die UserControl aus dem StackPanel zu brechen. Etwas, was Sie tun können, um mit der Elementplatzierung in der Z-Ebene herumzuspielen, besteht darin, ein Gitter als den äußersten Behälter zu verwenden (falls Sie dies nicht schon tun) und dies als eine Anleitung zum Auslegen Ihrer Elemente zu verwenden. Da Elemente innerhalb eines Rasters den gleichen Platz belegen können und in der Reihenfolge ihrer Deklaration z-geordnet sind, können Sie möglicherweise die gewünschte Funktionalität erhalten.

Nicht sicher, ob dies zu dem passt, was Sie versuchen, aber es ist einen Versuch wert. Elemente innerhalb eines Containers werden an den Grenzen ihres übergeordneten Containers abgeschnitten. Um das zu erreichen, wonach Sie suchen, würde ich denken, dass das UserControl ein Geschwister des StackPanel sein muss, anstatt ein Kind davon zu sein.