私は 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 コンテナーに配置しようとしましたが、コンテンツがウィンドウに合わせて拡大縮小されなくなりました。フルサイズになりますが、これは良くありません。
では、どうすればこれを行うことができますか?私は間違った木を吠えていますか?これを行うためのより良い/より簡単な方法はありますか?
