2011-12-22 5 views
0

2つのコントロールがあり、それぞれに動的コンテンツがあるため、幅はautoに設定されています。 しかし、私はそれらを整列させたいと思いますし、何らかの方法で幅をリンクする必要があります。2つのコントロールの最大幅を選択し、Silverlightで両方のコントロールに割り当てます。

したがって、Control_1の幅はautoです。 Loadedイベントの後、そのサイズは200になります。もう1つのCotnrol_2は250になります。そして、最初に幅を250に調整する必要があります。

答えて

0

なぜ、幅プロパティをViewModelのプロパティにバインドしないのですか。この方法では、1つの幅プロパティが変更された場合、その値に応じて、他のプロパティの幅を変更することができ、それがコントロールに反映されます。

+0

Luke Woodward氏によると、コントロールはWidthプロパティを 'Auto'とは異なるものに変更せず、ActualWidthはDPではありません。 – Walkor

0

2つのコントロールのSizeChangedイベントを処理すると、このようなことが起こります。私はこのコードをテストしていないので、私はそれが幅にコントロールのWidthを設定するかどうかわからない

void ControlAOrB_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    double maxWidth = Math.Max(controlA.ActualWidth, controlB.ActualWidth); 
    controlA.Width = maxWidth; 
    controlB.Width = maxWidth; 
} 

:私は、次のようなイベントハンドラに両方のコントロールでこのイベントを配線したいです既に別のSizeChangedイベントが発生し、このイベントハンドラを再度呼び出して、無限再帰を引き起こします。したがって、コントロールの幅を現在maxWidth未満の場合はmaxWidthに設定することが考えられます。

私はバインディングを使ったアプローチが特にうまく機能しないと思います。 FrameworkElementのActualWidthプロパティは、コントロールがレンダリングされた実際の幅を返しますが、依存プロパティではないため、ActualWidthにバインドすることはできません。

+0

私はその解決策が気に入らない、それは私に汚れているように見える。また、私はこれらのコントロールの子のWidthプロパティを設定しようとしているので、イベントや何か他のものを再スローする必要があります。 – Walkor

関連する問題