2010-12-28 5 views
0

私は非常に奇妙な問題を抱えているので、デバッグするのが非常に難しいので、もう一度SOコミュニティに向かいます。 :-)コントロールを追加すると、Silverlightがハングする

まず私のセットアップ(私はちょうどので、私の全体の前提が間違っているかもしれない、実行して学習、シルバーに新たなんだ注意!)上のビット:私はいくつかのルートノードを持つ

(フォーム)その下にいくつかの葉(質問)があります。 現在、どのフォームが現在選択されているかに応じて、質問を表示/非表示にするだけです(かなり簡単です)。コントロールの数がLayoutControl(私はDeveloperExpressコンポーネントを使用しています)あなたが別のフォームを選択すると

  • は、作成されたコントロールがリストに保存されているに追加され

    • 私は、次の操作を行います

  • 再び以前に選択したフォーム
  • フォームを選択すると、コントロールのリストを反復処理し、各要素は、私のlayoutcontrolに追加された上で、私は目を保存するときフォーム上のリストの要素eまず、親からそれらを削除して、問題がないことを確認します。

    これは機能します。

    私に1またはコントロールがある場合。

    これ以上のものがあれば、すべてがいつものように追加され、例外はスローされませんが、Silverlightは明らかに無限ループを起こします。 IEやChromeで実行しても、ブラウザがクラッシュするだけです! (または、私は、ブラウザのプラグインと思います)。

    私はこの間にデバッガを一時停止して問題の位置を確認しようとしましたが、「外部コード」で停止しています。 コードサンプルはあまりうまくいかないと思いますが、要素を保存して読み込む2つの方法があります。(注:AddControlは私が定義したメソッドです。要素を別のコントロールにラップして機能。同様に.MyChildrenは、私もこれをデバッグについて行くにはどうすればよい

    private void LoadElementsFromCurrentForm() 
        { 
         foreach (var child in _currentForm.Elements) 
         { 
          layoutControl1.AddControl(child); 
         } 
        } 
    
        private void SetElementsOnCurrentForm() 
        { 
         _currentForm.Elements.Clear(); 
         foreach (var child in layoutControl1.MyChildren) 
         { 
          _currentForm.Elements.Add(child); 
         } 
        } 
    

    ).Removeを使用してラッパーからコントロールを削除()し、それを返します! 重要かどうかは分かりませんが、これらのコントロールには一意の名前が付いています。

    セーレン

  • 答えて

    0

    よろしくあなたがデザインのマークアップを行うためにXAMLを使用しようとすべきであるシルバーを最大限に活用するには。 質問のリストを作成するには、ListboxまたはItemsControlを使用します。 次に、リストの各項目のスタイルを「見た目が正しい」ようにすることができます。 リストボックスをObservableCollectionにバインドすると、リストに追加または削除するだけで、リスト内のwhatsに従ってguiが更新されます。

    Silverlightで本当にうまく動作するMVVMを見てください。

    +0

    ありがとうございます。残念ながら、私は単に観察可能なコレクションにバインドすることはできません。コントロールは、私がアクセスできないコンテナに配置され、コントロールのドラッグ・ドロップによる並べ替えを可能にします。これは保持する必要があります。しかし、あなたのヒントに感謝します - 私はMVVMを調べます。 – Fafnr

    関連する問題