私の WPF アプリケーションには、Canvas の仮想化メカニズムを提供する Panel としてZoomableCanvasを持つ ItemsControl があります。これは完全に機能しています。このキャンバスには、グラフのような背景が必要です。以下の xaml を使用すると、グリッドが生成されますが、 (読み込み時に) ビューポートの範囲までしか生成されません。そのため、スクロールすると、背景グリッドが垂直方向および水平方向に切り取られていることがわかります。performant-virtualized-wpf-canvas では、これは子ビジュアルをキャンバスに背景として追加することで処理されました。
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<ZoomableCanvas x:Name="ZCanvas" Loaded="ZoomableCanvas_Loaded" >
<ZoomableCanvas.Background>
<DrawingBrush TileMode="Tile" Stretch="Fill"
Viewport="0 0 100 60" ViewportUnits="Absolute"
ViewboxUnits="Absolute" >
<DrawingBrush.Drawing>
<GeometryDrawing Geometry="M0,0 L0,1 0.03,1 0.03,0.03 1,0.03 1,0 Z" Brush="Gray" />
</DrawingBrush.Drawing>
</DrawingBrush>
</ZoomableCanvas.Background>
</ZoomableCanvas>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
問題を詳しく説明するには: 次の画像を参照してください。
ロード時 --- バックグラウンド グリッドが表示され、子の左が 0,0 からかなり離れています。
右にスクロールして戻る -- 背景グリッドが切り取られ、子がキャンバスの左端から開始するように見えます
ZoomableCanvas の幅全体に広がる Grid 背景をどのように持つことができますか? また、On Scroll の問題をどのように修正しますか?
ヘルプ/ヒントを心から感謝します。