39

私は WPF にかなり慣れていないので、解決するのが少し難しいと思われる問題に遭遇しました。基本的に、スケーラブルであるが、正方形 (またはその他の任意の) アスペクト比を維持する 4x4 グリッドが必要です。これは実際には非常に難しいように思えますが、これはかなり一般的な要件であると想像していたので、私は驚きました。

次のようなグリッド定義から始めます。

<Grid>
  <Grid.RowDefinitions>
    <Grid.RowDefinition Height="*"/>
    <Grid.RowDefinition Height="*"/>
    <Grid.RowDefinition Height="*"/>
    <Grid.RowDefinition Height="*"/>
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <Grid.ColumnDefinition Width="*"/>
    <Grid.ColumnDefinition Width="*"/>
    <Grid.ColumnDefinition Width="*"/>
    <Grid.ColumnDefinition Width="*"/>
  </Grid.ColumnDefinition>
  ...
</Grid>

ストレッチするように設定すると、ウィンドウまたはそれを入れたコンテナを埋めることができます。行と列は均一ですが、縦横比は固定されていません。

次に、使用可能なスペースを使用するために StackPanel に入れてみました。役に立ちませんでした。Viewboxes を思い出したとき、私が一番心に残ったのは何でしたか。

<StackPanel Orientation="Horizontal">
  <Viewbox>
    <Grid Height="1000" Width="1000"> <!-- this locks aspect ratio -->
      <Grid.RowDefinitions>
        <Grid.RowDefinition Height="*"/>
        <Grid.RowDefinition Height="*"/>
        <Grid.RowDefinition Height="*"/>
        <Grid.RowDefinition Height="*"/>
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
        <Grid.ColumnDefinition Width="*"/>
        <Grid.ColumnDefinition Width="*"/>
        <Grid.ColumnDefinition Width="*"/>
        <Grid.ColumnDefinition Width="*"/>
      </Grid.ColumnDefinition>
      ...
    </Grid>
  </viewbox>
  <Label HorizontalAlignment="Stretch">Extra Space</Label>
</StackPanel>

これで、コンテンツがスケーリングされ、アスペクト比が維持されます。問題は、ウィンドウの幅が十分でない場合、グリッドの一部が画面からはみ出すことです。その場合は、スクロールできるようにしたいと思います。同様に、最小サイズが必要な場合もあり、垂直スクロールにもつながる可能性があります。

StackPanel と Grid を (別々に) 適切な ScrollViewer コンテナーに配置しようとしましたが、コンテンツがウィンドウに合わせて拡大縮小されなくなりました。フルサイズになりますが、これは良くありません。

では、どうすればこれを行うことができますか?私は間違った木を吠えていますか?これを行うためのより良い/より簡単な方法はありますか?

4

4 に答える 4

78

Viewbox内にコンテンツ (グリッド) を配置し、 Viewbox.Stretch プロパティStretch.Uniformに設定する必要があります

Viewbox コントロールは、子要素を拡大または拡大縮小するために使用され、子要素が拡大される方法を制御できます。ここで例を確認してください。

代替テキスト
(ソース: microsoft.com )

于 2008-11-14T14:31:11.610 に答える
5

この場合、最善の策はUniformGridです。これは、NxN グリッドが必要な場合にのみ役立ちます。

于 2008-11-14T14:43:39.213 に答える
-1

SizeToContent="WidthAndHeight"目的の動作を実現するには、ウィンドウに設定する必要があります。

于 2008-11-14T07:16:38.023 に答える
-4

列と行幅ごとに*の代わりに0.25*を入力します

于 2008-11-14T04:54:51.833 に答える