0

ここで最もよく説明されている次のレイアウトの問題があります(大まかなイラストの謝罪)

ここに画像の説明を入力してください

各コントロールが個別のユーザーコントロールとして実装されていると仮定します

右上(緑)のコントロールを展開すると、最初の(緑)コントロールの幅よりも広く、その真下に、最初の行の2つのコントロールに等しい幅(colspanなど)で展開された領域が表示されるような動作が必要です。 2)その下のすべてのコンテンツを押し下げている間

最初に2行のグリッドがあると仮定します..最初の行はいくつかのコントロールであり、2番目に拡張可能なコントロール-2番目の行は2のcolspanを満たすものを何でも持つことができます..その中に何かを含む別のレイアウトコンテナまたはユーザーコントロールである可能性があります。

緑の拡張可能なコントロールがユーザーコントロールである場合、私が説明しているこの動作を取得するには、何をする必要がありますか?

ユーザーコントロール内からユーザーコントロール内のレイアウトグリッドに展開されたコンテンツ(?)を表すコンテナーのGrid.RowおよびColspanアタッチされたプロパティを設定する必要があると思いますか?(ただし、ユーザーコントロール内のコントロールの添付プロパティを、ユーザーコントロール外のレイアウトコンテナーに設定するにはどうすればよいですか?特に、展開されたコンテンツ自体がユーザーコントロール内のグリッド内にある場合)。

そして、これができたとしても、コントロールがグリッドレイアウトコンテナにある場合にのみ機能するため、これは非常に脆弱です。

何か案は?グリッドを使用する必要はありませんが、それはそれを解決するための自然で明白な方法のようですか?

4

1 に答える 1

1

少し前まで似たようなレイアウトでした。これは私のために働いた:

  • 緑色のコントロールで、必要なサイズの依存関係プロパティを作成します。この場合、全幅 (下の四角形) と狭い幅 (上の四角形) が必要です。
  • 最上位のコンテナーで、サイズを測定するためのグリッドを作成します。したがって、次のようなものが得られます。

    <Grid x:Name="fullSize">
         <ColumnDefinition/>
         <ColumnDefinition x:Name="halfSize"/>
    </Grid>
    

ここで、列の幅を適切な方法で分割できます。- 次に、このグリッドで測定された幅をバインドします

   <foo:GreenControl
         FullWidth={Binding ElementName=fullSize, Path=ActualWidth}
         NarrowWidth={Binding ElementName=halfSize, Path=ActualWidth}
   />

これで、値更新のハンドラーなどで、GreenControl の幅を必要に応じて設定できるようになりました。私の場合、XAML の要素のバインディングを依存関係の小道具に設定します。

于 2012-11-16T08:31:04.963 に答える