1

カスタム UserControl で zIndexing を動作させようとしていますが、次のように TabControl 内にポップアップすると、コントロールの下部がクリップされます。

コントロールのデモ

これは私の 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>
4

3 に答える 3

2

あなたの例から、ZIndexに何を期待するかは明確ではありません。ZIndexは、同じコンテナ内の要素の相対的なスタックにのみ影響するため、例で使用しているZIndex設定はいずれも影響を及ぼしません。OrderListは、その子との間のZIndexの相対値に関係なく、TabItemによってクリップされます。

于 2009-03-27T06:07:43.687 に答える
2

投稿した画像から、ユーザーコントロールには、UserControlの子であるある種のシミュレートされたポップアップウィンドウ([メモ]ペイン)があるように見えます。この場合、[メモ]パネルがOrderListのレイアウト計算に含まれていないと、クリッピングが説明される可能性があります。Notesコントロールを真のポップアップウィンドウにするか、エキスパンダーのようなものを使用することを検討してください。エキスパンダーは、展開すると、レンダリングにさらに多くのスペースが必要であることを親(UserControl)に伝えることができます。

StackPanelのようなコンテナは、常に子コントロールを「スタック」することに注意してください(そのため、名前が付けられています)。つまり、子コントロールが重複することはありません。このため、子孫のいずれかにZインデックスを設定しても意味がありません。コントロールをオーバーラップさせてからZ-Indexを設定するコンテナとして、グリッドまたはキャンバスを使用することをお勧めします。また、Z-Indexはコントロールの直接の親のコンテキストにのみ関連するため、上記の例のようにすべてのコントロールにPanel.Zindex="n"を指定しても機能しないことに注意してください。

私が見ることができることから、この問題はレイアウトの問題であり、Zインデックスの問題ではありません。

于 2009-03-27T06:10:57.220 に答える
1

たぶん、あなたはUserControlをStackPanelから切り離したいと思うでしょう。Z平面での要素の配置を試すためにできることは、グリッドを最も外側のコンテナとして使用し(まだ行っていない場合)、これを要素のレイアウトのガイドとして使用することです。グリッド内のアイテムは同じスペースを占めることができ、宣言された順序に基づいてz順に並べられているため、探している機能を取得できる場合があります。

これがあなたがやろうとしていることに合うかどうかはわかりませんが、試してみる価値はあります。コンテナ内のアイテムは親コンテナの境界でクリップされるため、探していることを実現するには、UserControlがその子ではなくStackPanelの兄弟である必要があると思います。

于 2009-03-27T06:10:38.830 に答える