C# 在WPF/MVVM中缩放到Scrollviewer中心

C# 在WPF/MVVM中缩放到Scrollviewer中心,c#,wpf,mvvm,zooming,scrollviewer,C#,Wpf,Mvvm,Zooming,Scrollviewer,在我的应用程序中,我得到了一个滚动查看器,其中包含一个列表框,用于使用画布显示边框。 列表框ItemSource绑定到包含边框的ObservableCollection 现在我想缩放到ScrollViewer的中心。 将滑块的值绑定到Canvas的ScaleX和ScaleY。RenderTransform很容易,但是如何将Scrollviewer的视口宽度*0.5和Scrollviewer的视口高度*0.5绑定到CenterX或CenterY 我知道在xaml中无法进行计算,但我甚至无法绑定Vi

在我的应用程序中,我得到了一个
滚动查看器
,其中包含一个
列表框
,用于使用
画布
显示
边框。
列表框
ItemSource
绑定到包含边框的
ObservableCollection

现在我想缩放到
ScrollViewer
的中心。 将滑块的值绑定到
Canvas的
ScaleX
ScaleY
。RenderTransform
很容易,但是如何将
Scrollviewer的视口宽度*0.5
Scrollviewer的视口高度*0.5
绑定到
CenterX
CenterY

我知道在xaml中无法进行计算,但我甚至无法绑定
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>


ZoomCenter和ZoomCenter是c代码中的属性,我使用 ((MainView)System.Windows.Application.Current.MainWindow).ContentViewer.ViewportWidth;
我知道这不是MVVM和作弊,但我找不到更好的解决办法。

我不确定我是否完全理解。。。为什么要使用
ScrollViewer
ListBox
,而不是只使用
ListBox
中已有的
ScrollViewer
?然后您简要地提到了一个
滑块
。。。这和什么关系?如果您添加了一些XAML,可能会帮助我们更好地理解您的问题。使用?我对MVVM模式不熟悉,不知道listbox中的Scrollviewer