私はこのように定義された単純なグリッドを持っています:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="24" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="24" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
グリッドのすべてのセル (左上のセルを除く) に、グリッドまたはキャンバスを追加します。これらのコンテナーに、いくつかの異なるオブジェクトを追加します。これらのコントロールの一部は、ズームインまたはズームアウトとスクロールにより表示サイズを変更できます。
元のコードは私自身のものではありませんが、状況をシミュレートするために小さなテスト プログラムを作成しました。
<Grid Grid.Column="1" Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Grid x:Name="Frame" Grid.Row="0">
<Canvas Width="200" Height="300" Background="Green" >
<Canvas x:Name="Page" Width="200" Height="300" Background="Bisque" Margin="0 -20 0 0">
<Canvas.RenderTransform>
<ScaleTransform ScaleX="{Binding ElementName=Zoom, Path=Value}"
ScaleY="{Binding ElementName=Zoom, Path=Value}"
CenterX="100" CenterY="150" />
</Canvas.RenderTransform>
</Canvas>
</Canvas>
</Grid>
<Slider x:Name="Zoom" Grid.Row="1" HorizontalAlignment="Right" Width="200"
Minimum="0.1" Maximum="2" Value="1"
TickPlacement="BottomRight" TickFrequency="0.1" IsSnapToTickEnabled="True" />
ページが大きすぎて、特に拡大すると範囲外になります。
クリップを追加しようとしましたが、値を動的に設定する方法がわかりません。
<Grid x:Name="Frame" Grid.Row="0">
<Grid.Clip>
<!-- I want to bind to the actual size of the cell -->
<RectangleGeometry Rect="0 0 480 266" />
</Grid.Clip>
<Canvas Width="200" Height="300" Background="Green" >
....
さらに、レンダリングされたキャンバスの実際のサイズと位置を取得するにはどうすればよいですか。ズーム後に値を読み取るために Zoom_ValueChanged を挿入しましたが、幅と高さはまだ 200 または 300 で、ActualWidth と ActualHeight は両方ともゼロです。
前もって感謝します。