2009-05-19 27 views
1

Silverlight 2でカスタムコントロールを動的に追加していますが、表示されません。しかし、Silverlight Spyのビジュアルツリーを調べると、VisibilityプロパティがVisibleで、Collapsedに戻してVisibleに戻すと、コントロールが表示されるようになります。動的に作成されたSilverlightコントロールが表示されない

何が間違っていますか?私はこれを解決するために何を探すべきであるかに関する任意のアイデア?

答えて

1

タイムラインに期間を動的に追加したときに発生した問題を解決できました。

私が動的にキャンバスに追加するコントロールは、次の構造を持っています。

<Path x:Name="ribbonItem" Fill="Green"> 
    <Path.Data> 
    <GeometryGroup> 
     <RectangleGeometry x:Name="ribbonItemBackground" /> 
    </GeometryGroup> 
    </Path.Data> 
</Path> 

たRectangleGeometryの寸法は、三つの入力、タイムラインバーと(私が追加しているものを)タイムラインアイテムの日付と時刻の範囲、バー(キャンバス)の大きさに依存しています。

次のメソッドは、オブジェクトのBarRange、ItemRangeまたはBarSizeプロパティのいずれかが設定されているときに呼び出されます。

private void Resize() 
{ 
if (_itemRange != null && _barRange != null && _barSize != Size.Empty) 
    { 
    ribbonItemBackground.Rect = ItemRectangle(); 
    } 
} 

これは私の質問で述べた描画の問題と解決策がすぐribbonItemBackground.Rectを設定した後

ribbonItem.InvalidateMeasure(); 

を追加しました原因。

+0

よろしくお願いします! :)次回に質問するような情報を追加してください。 –

1

最初に気になることは、ダイナミックコントロールを作成するためにどのような種類のコンテナオブジェクトが使用されているかです。

コンテナを使用せずにコントロールを追加すると、問題が発生する可能性があります。 私は多くのコントロールオブジェクトを動的に作成したとは言えませんが、スタックパネルにアイテムを追加するのが最も簡単な方法です。

良いテストケースは、グリッドを作成し、コントロールを作成するときにグリッドの場所を割り当てることです。

ちょうどこれを行う方法についてはlinkです。

+0

オブジェクトを作成してコンテナに追加しないと間違っても、それがビジュアルツリーにまったく置かれないことがあります。 –

1

あなたが追加しているコントロールでUpdateLayout()を呼び出そうとしましたか?

2

ParentControlのUpdateLayout()は必要ありません。

しかし、my_parent_control.Add(UIElement mynewcontrol)を忘れないでください。

つまり、my_parent_controlはスタックパネルです。

関連する問題