0

私のアプリケーションでは、 を使用して表示するScrollViewerを含むを取得しました。ListBoxは、境界線を含む にバインドされています。ListBoxBordersCanvasItemSourceObservableCollection

今度は の中心にズームしたいと思いScrollViewerます。スライダーの値をScaleXandにバインドするScaleYのは簡単でしたが、 andをorCanvas.RenderTransformにバインドするにはどうすればよいですか。Scrollviewer's ViewportWidth*0.5ScrollViewer's ViewportHeight*0.5CenterXCenterY

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や不正行為ではないことはわかっていますが、より良い解決策を見つけることができませんでした.

4

0 に答える 0