1

これは、いくつかの特別な機能を備えたウィンドウのように動作することを目的としています。これまでのところ、サイズを変更して画面全体にドラッグできます。XAML を使用して複数の CoolControl オブジェクトをアプリケーション ウィンドウに追加すると、最後に宣言されたオブジェクトが常に前面に表示されます。これは問題ありませんが、実行時に CoolControl オブジェクトの 1 つをクリックすると、そのコントロールが他のすべてのコントロールの前に配置されるようにしたいと考えています。

を使用してみましCanvas.SetZIndexたが、十分に賢い解決策を思いつくことができない場合を除き、それがどのように役立つかわかりません。1 つのコントロールの Z-Index を 9999 に設定すると、時間の経過とともにクリックする他のすべてのコントロールの値が同じ 9999 になるためです。

誰かの UserControl の BringToFront() メソッドを作成するタスクを与えられた場合、可能な限り簡単な方法でそれを行うにはどうすればよいでしょうか? 親ウィンドウを取得し、すべてのコントロールをループして、最大の Z-Index を見つけ、それに応じて CoolControl の Z-Index を設定するよりも、それが有効な解決策である場合は、より良い解決策をお勧めします。

4

1 に答える 1

3

私はそのCanvas.SetZIndex方法に精通していません。ある種の添付プロパティまたは動作のように見えます。

z-index を設定するロジックを提供できる場合は、インスタンスを追跡して z-index を管理し、選択/作成された順序でそれらを維持する方法を概説しました。

public class CoolControl : UserControl
{

    public CoolControl()
    {
        InitializeComponent();
        Instances.Add(this);
    }

    static IList<CoolControl> Instances = new List<CoolControl>();

    void SelectThisInstance()
    {
        foreach(var instance in Instances)
        {
            // decrement z-index instance
        }

        // set z-index of this instance to show at top
    }
}
于 2010-07-29T01:20:36.457 に答える