在我的应用程序中,我得到了一个ScrollViewer
,其中包含一个ListBox
要显示Borders
的Canvas
. ListBoxItemSource
绑定到ObservableCollection
,其中包含边框。
现在我想放大到ScrollViewer
. 将滑块的值绑定到ScaleX
and ScaleY
ofCanvas.RenderTransform
很容易,但是如何将Scrollviewer's ViewportWidth*0.5
and绑定ScrollViewer's ViewportHeight*0.5
到CenterX
or 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>
ZoomCenterX 和 ZoomcenterY 是 c# 代码中的属性,我使用 ((MainView)System.Windows.Application.Current.MainWindow).ContentViewer.ViewportWidth; 计算它们的值 我知道这真的不是 MVVM 和作弊,但我找不到更好的解决方案。