2011-01-28 18 views
0

のオーバーライドを手配されていないのはなぜ私が試したもののへ:のZIndexをする際に考慮のStackPanelここ

  1. を追加しました私の窓へのStackPanel(オリエンテーション:水平)ボタンの
  2. 追加セットへ最初のボタンののZIndexが第二1
  3. より高くなるように設定し、それ
  4. は、最初のボタン
の幅を増加しました最初のボタンの幅はもう十分ではない場合を除きのStackPanelの幅は変更すべきではありません

  1. 私は2番目のボタン(atlestオーバーレイ)の上になるように最初のボタンを期待
  2. :私は何を期待

は、実際に何が起こっている:

  1. 最初のボタンの幅が増加し、2番目のボタンがそれに応じて右側に移動します。私は自分自身の中にアイテムを配置しながら、StackPanelのはのZIndexと考えられていないことを知っている

    :彼らはここで、最初のボタンの幅

の増加に

  • のStackPanelの幅の増加は私の質問で同一平面上にとどまります、 しかし、なぜ?? ZIndexを子供たちの手配中に考えてはいけませんか?

  • 答えて

    2

    Stackpanelはその幅に基づいて子供を「スタック」します。つまり、アイテムの幅を広げる(またはマージンを増やす)と、スタックパネルは単にこれに合わせて拡張されます。スタックパネル内のアイテムが重なり合うようにするには、レイアウトが計算された後にその場所を変更する必要があります。 RenderTransformを使用してこれを実行できます。以下の例を参照してください。

    <StackPanel Orientation="Horizontal" VerticalAlignment="Top"> 
        <Button Content="One" Canvas.ZIndex="10"> 
        <Button.RenderTransform> 
         <TranslateTransform X="10"/> 
        </Button.RenderTransform> 
        </Button> 
        <Button Content="One"/> 
        <Button Content="One"/> 
        <Button Content="One"/> 
    </StackPanel> 
    

    はい、ZIndexが尊重されています。これはキャンバスの付属資料ですが、キャンバスではなくレンダリングエンジンで直接使用されているようですので、上記のコードで動作します。

    +0

    なぜキャンバス:

    は、ここでボタンの問題に適応し、同じコードです。ZIndex、レイアウトにキャンバスを使用していますか?私はZIndexがPanelの添付プロパティだと思います。 – sudarsanyes

    +0

    ZIndexがあなたの例でどのように尊重されているか説明してください。それはStackPanelによって無視されますか? – sudarsanyes

    +0

    私の答えで言ったように、アタッチされたプロパティはCanvasで定義されていますが、レンダリング時に実際に使用されるため、Grid、StackPanelなどで動作します。 – ColinE

    0

    wpfレイアウト要素とパネルのzインデックスを設定する方法に関する関連情報を見つけようとしました。キャンバスを使用すると、私は単に調査する時間がなかった異なる位置付けの問題が発生します。ここでは、xamlのPanel.ZIndexプロパティを使用した単純なソリューションを示します。

    <Grid> 
    <Border Width="100" Height="100" Margin="0,0,50,50" Panel.ZIndex="1" Background="Navy" Opacity="0.3" 
        VerticalAlignment="Top" HorizontalAlignment="Left"> 
    </Border> 
    <Border Width="100" Height="100" Margin="50,50,0,0" Background="Fuchsia" Opacity="0.3"> 
    </Border> 
    

    得られた2つの方形境界要素が重複します。境界の代わりにスタックパネルを使用し、このロジックを使用して簡単に何かを重複させることができます。

    <Grid> 
        <StackPanel Panel.ZIndex="10" Margin="20,20,0,0" HorizontalAlignment="Left"> 
        <Button Content="One" Width="50" Height="40"> 
        </Button> 
        </StackPanel> 
    <StackPanel Orientation="Horizontal" Margin="50,0,0,0" > 
        <Button Content="Two" Width="50" Height="40"/> 
        <Button Content="Three" Width="50" Height="40"/> 
        <Button Content="Four" Width="50" Height="40"/> 
        </StackPanel> 
    </Grid> 
    
    関連する問題