私のアプリケーションでは、 を使用して表示するScrollViewer
を含むを取得しました。ListBoxは、境界線を含む にバインドされています。ListBox
Borders
Canvas
ItemSource
ObservableCollection
今度は の中心にズームしたいと思いScrollViewer
ます。スライダーの値をScaleX
andにバインドするScaleY
のは簡単でしたが、 andをorCanvas.RenderTransform
にバインドするにはどうすればよいですか。Scrollviewer's ViewportWidth*0.5
ScrollViewer's ViewportHeight*0.5
CenterX
CenterY
xaml では計算ができないことはわかっていますが、 bind さえできませんViewportWidth
。MVVM を使用せずに中央にズームするのは非常に簡単ですが、MVVM で機能するソリューションが見つかりません。
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Width="{Binding CanvasWidth}" Height="{Binding CanvasHeight}">
<Canvas.RenderTransform>
<ScaleTransform ScaleX="{Binding Zoomlevel,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" ScaleY="{Binding Zoomlevel,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" CenterX="{Binding ZoomCenterX, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" CenterY="{Binding ZoomCenterY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Canvas.RenderTransform>
</Canvas>
</ItemsPanelTemplate>
ZoomCenterX と ZoomcenterY は、((MainView)System.Windows.Application.Current.MainWindow).ContentViewer.ViewportWidth; を使用して値を計算する C# コードのプロパティです。これは実際にはMVVMや不正行為ではないことはわかっていますが、より良い解決策を見つけることができませんでした.