1

グリッド行を、2つの列に20/80に分割された別のグリッドとして設計しました。左側のグリッドは、最小幅が250です。

    <Grid Grid.Row="1" HorizontalAlignment="Stretch">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" MinWidth="250"/>
            <ColumnDefinition Width="4*"/>
        </Grid.ColumnDefinitions>

        <Grid Grid.Column="0" Background="Red" />
        <Grid Grid.Column="1" Background="Blue" />
    </Grid>

1250を超える幅では、これは期待どおりに機能しますが、それを下回るとすぐに、最初の列は250に達したため、(本来あるべきように)縮小を停止しますが、2番目の列は以前と同じ速度で縮小し続けます。 (周囲のウィンドウと同じ速度で崩壊するのではなく)。その結果、グリッドがコンテナまで伸びるように設定されていても、コンテンツの一部が切り取られます。

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

他の星の幅の列のように、青いフレームのサイズが親コンテナ内に収まるようにサイズ変更されないのはなぜですか?なぜ最小幅を設定すると、これが突然壊れたのですか?


更新:サンプルウィンドウでUI全体を再構築しました(各セクションのコンテンツを境界線に置き換えるだけです)が、問題を再現できません。

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

コンテンツ(MinWidthの制約が発生しておらず、親グリッド列のように遅すぎるとはいえ、適切にサイズ変更されているように見える)がまだ何らかの形でグリッド列に影響を与えている可能性はありますか?オリジナルがUserControlにあり、これがWindowにあるという事実はどうですか?

4

2 に答える 2

1

申し訳ありませんが、元の質問の情報では、この質問に答えることができませんでした。

残念ながら、問題は Xceed DataGridControl の実装のバグです。元の UI で各 DataGridControl を境界線またはその他のコントロールに置き換えるだけで、すべての要素のサイズが変更されます。

問題は、DataGridControls が独自のサイズの制約に直面していたことではありません。実際、ウィンドウのサイズが変更されると、彼らは自分自身のサイズを変更し続けていましたが、間違っていました。私の推測では、それらの実装は、階層または親 UI 要素をたどり、利用可能なスペースを計算したものに従ってサイズを調整することに依存していると思います。親要素の 1 つの正確な幅を指定する以外に、これを解決できないことがわかりました。親要素がスター サイズ設定を使用し、これらの幅が最大または最小の幅または高さを持つように列定義によって制約されている場合、Xceed DataGridControl は無視され、使用可能なサイズよりも大きいまたは小さいサイズを誤って要求します。親コントロールに合わせて伸縮します。

私が見つけた Xceed のボイコットを伴わない唯一の回避策 (これは非常に魅力的です) は、レイアウトを再設計して、最初の列がウィンドウの残りの部分と一緒に成長せず、単純に最小幅に固定されるようにすることです。

    <Grid Grid.Row="1" HorizontalAlignment="Stretch">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="250"/>
            <ColumnDefinition Width="4*"/>
        </Grid.ColumnDefinitions>

        <Grid Grid.Column="0" Background="Red" />
        <Grid Grid.Column="1" Background="Blue" />
    </Grid>

大きな解像度の画面では奇妙で不均衡に押しつぶされたように見えますが、自動サイズ変更中に幅を制限しようとすると、説明した動作が発生します。

于 2012-07-31T19:31:45.977 に答える
0

それは完全に正しいです。定義では、最初の列の幅が少なくとも 250 である必要があると定義しています。したがって、1* も少なくとも 250 である必要があります。2 番目の列の幅は、最初の列の値に 4 を掛けた値にする必要があります。下手な英語で申し訳ありませんが、ご理解いただければ幸いです。そのための簡単で迅速な解決策が見つかりません。2 番目の列の MaxWidht プロパティをグリッドの ActualWidth プロパティにバインドし、その値を 250 減らす必要があるかもしれません。

于 2012-07-31T18:06:23.717 に答える