0

私はこのような状況にあります:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="560"/>
        <ColumnDefinition Width="250"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" /> <!-- status infos & content start -->
        <RowDefinition Height="Auto" /> <!-- status infos -->
        <RowDefinition Height="Auto" /> <!-- status infos -->
        <RowDefinition Height="Auto" /> <!-- status infos -->
        <RowDefinition Height="*"/>     <!-- content ends -->
    </Grid.RowDefinitions>

    <!-- image a list of custom controls directed to the first or second column on all rows here -->

    <SomeCustomControl Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Grid.RowSpan="2" />
</Grid>

ご覧のとおり、2つの列があります。右側は多かれ少なかれステータス情報用に予約されており、左側はコンテンツ用に予約されています。「SomeCustomControl」には、ColumnSpan="2"に設定する必要がある幅の広いコントロールが含まれています。右側の列にまだステータスコントロールがあることに注意してください。SomeCustomControlには、次のようなものがあります。

<Grid x:Name="LayoutRoot">

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="250"/>
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        [...]
        <RowDefinition Height="Auto" /> 
        <RowDefinition Height="*"  />   <!-- problem control here -->
        <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions>

    <!-- a list of Controls limited to the first column -->

    <ProblemControl Grid.Column="0" Grid.ColumnSpan="2" />
</Grid>

これで、SomeCustomControlの最初の行には、最初の列に限定されたコントロールが含まれ、次に、ProblemControlを含む行があります。ステータスコントロールの高さは事前に決定されておらず、表示されるステータス情報によって異なります。最初の列に制限されているSomeCustomControlのコントロールにもさまざまな高さがあり、現在はコンテンツを通じて自動的に決定されます。

現在、ProblemControlがいくつかのステータスコントロールと重複しているという問題があります。SomeCustomControlでステータスコントロールと制限付きコントロールの高さを計算しようとしましたが、すべてのコントロールのサイズが動的であるため、正しい高さを取得できないようです。RowDefinitionsの高さにはすべてAutoタイプと値1のHeightsが含まれており、具象コントロールの高さはNaNのようです。

高さを計算する方法や、他の方法で重複を防ぐ方法に関するアイデア。

4

3 に答える 3

2

私は多少同じ問題に遭遇しましたが、最近解決策に出くわしました。幅または高さが Auto に設定されているコントロールの幅と高さのプロパティにアクセスできない理由は、ランタイム システムがプロパティ値を設定する前にクエリを実行しているためです。コントロールのレンダリングされた高さを取得するためのプロパティActualWidthActualHeightクレームなので、理論的には、SL アプリケーションの読み込みが完了するまで待ってからクエリを実行できると思います。それまでにコントロールがレンダリングされるため、ActualHeight/ActualWidth値設定する必要があります。

残念ながら、これもそうではありません。これらの値がいつ設定されるかは保証されないようです。そのため、私が使用した回避策はSizeChanged、値が必要なコントロールの -event にフックすることです。SizeChangedコントロールの幅と高さのプロパティが変更されるたびにトリガーされるため、そのイベントを処理すると、値が NaN 以外に設定されることが保証されます。

そのイベントのハンドラーで実行する必要があるロジックを実行すると、値が設定されていることがわかります。

于 2009-08-10T13:58:35.547 に答える
1

コントロールのActualHeightプロパティを試してみましたか?

于 2009-07-03T14:32:16.643 に答える
0

Gridおよびいくつかのパネルを適切に使用することで、これを解決できるはずですDockPanel(StackPanel非常に便利です)。HorizontalAlignment一部のコントロールではまたはVerticalAlignmentプロパティを に設定する必要がある場合もありStretchます。

あなたの問題を再現したり、正しく対処したことを知るには、あなたの例には十分ではありません。より具体的なヘルプが必要な場合は、例を展開して実行して問題を確認できるようにしてください。

于 2009-07-03T14:44:21.997 に答える