2011-12-06 27 views
0

私はユーザーがさまざまなフォーム要素を選択してドラッグできるフォームを持っています。ユーザーはフォームのレイアウトをカスタマイズできるので、私はキャンバスを使用しています。すべての要素は、その子です。WPFでコントロールを一番上に作る

2つの要素がキャンバスの子として最後に追加されたものと同じ領域にある場合は、上に描画されます。私は、アクティブな要素、つまりドラッグされている要素が、一番上の要素に設定されるようにしたいと考えています。

私はSetZOrderメソッドを使って0に設定しましたが、何もしません。検査の際、GetZOrderを呼び出すすべての要素を調べると、それぞれの値が0になります。そのため、0に設定しても違いはありません。

私が見つけた唯一の解決策は、キャンバスに要素を削除して追加することです。

 _mainCanvas.Children.Remove(_selectedElement); 
     _mainCanvas.Children.Add(_selectedElement); 

これは機能しますが、これを行うにはより好ましい方法が必要です。

+0

あなたはJosh Smithによってこの記事を見てきました:http://www.codeproject.com/KB/WPF/DraggingElementsInCanvas.aspx –

答えて

0

ZIndexは、どちらが最上位であるかを判断します。最も高いZIndexが勝ちます。一番上にしたいZIndexを他のZIndexよりも高い数値に設定してみてください。

+2

それは['ZIndex']です(http://msdn.microsoft.com/en- us/library/system.windows.controls.panel.zindex.aspx).. –

+0

@HBうわー!それが私がメモリからやっていくために得たものです。一定。 –

+0

私の問題は、ZIndexのデフォルトは0です。同じZIndexを持つ複数のコントロールを保護することはできません。私はすべてのコントロールをZIndex 1にデフォルト設定することができます。コントロールを選択するとZIndexは0に設定されますが、未選択の場合は1に戻す必要があります。私はちょうどZIndexを0に設定し、それが自動的に他のZIndex値をすべてシフトすることを望んでいたなら、以前に選択された要素を追跡し、ZIndexを何か高いものに戻すことに気にする必要はありません。その時点でコントロールを削除して追加するだけで簡単になります。 – WPFNewbie

関連する問題