如何使Wpf scrollviewer根据图像缩放进行调整?
How to make Wpf scrollviewer adjust according to Image scaling?
我创建了一个 Wpf 用户控件,它显示用户图像,还允许用户使用鼠标放大或缩小图像 scroll.I 我正在使用 scrollviewer 控件以允许滚动,以防图像大小大于它的容器。当图像尺寸大于其容器时,Scrollviewer 工作正常。但是当图像尺寸小于它的容器时,卷轴不会消失。那么,如果图像可以放入容器中,我该如何使卷轴消失。下面是我正在使用的xaml:
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Grid Grid.Row="0">
<!--<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">-->
<Image x:Name="PdfImage" RenderTransformOrigin="0.5,0.5" MouseWheel="PdfImage_MouseWheel" ClipToBounds="True">
<Image.RenderTransform>
<ScaleTransform x:Name="scale" ScaleX="1" ScaleY="1" CenterX="0.5" CenterY="0.5" />
</Image.RenderTransform>
</Image>
<!--</ScrollViewer>-->
</Grid>
</ScrollViewer>
这是我用来允许用户放大或缩小图像的代码:
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{
var st = (ScaleTransform)PdfImage.RenderTransform;
double zoom = e.Delta > 0 ? .2 : -.2;
double newXScaleValue = st.ScaleX + zoom;
double newYScaleValue = st.ScaleY + zoom;
if ((newXScaleValue >= 0.1 && newXScaleValue <= 4) && (newYScaleValue >= 0.1 && newYScaleValue <= 4))
{
st.ScaleX += zoom;
st.ScaleY += zoom;
}
}
您正在应用渲染变换。这种变换在测量和排列步骤之后应用,并且与布局无关。从滚动查看器的角度来看,无论放大或缩小多少,内容的宽度和高度都不会改变。请尝试使用 Image.LayoutTranform。
我创建了一个 Wpf 用户控件,它显示用户图像,还允许用户使用鼠标放大或缩小图像 scroll.I 我正在使用 scrollviewer 控件以允许滚动,以防图像大小大于它的容器。当图像尺寸大于其容器时,Scrollviewer 工作正常。但是当图像尺寸小于它的容器时,卷轴不会消失。那么,如果图像可以放入容器中,我该如何使卷轴消失。下面是我正在使用的xaml:
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Grid Grid.Row="0">
<!--<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">-->
<Image x:Name="PdfImage" RenderTransformOrigin="0.5,0.5" MouseWheel="PdfImage_MouseWheel" ClipToBounds="True">
<Image.RenderTransform>
<ScaleTransform x:Name="scale" ScaleX="1" ScaleY="1" CenterX="0.5" CenterY="0.5" />
</Image.RenderTransform>
</Image>
<!--</ScrollViewer>-->
</Grid>
</ScrollViewer>
这是我用来允许用户放大或缩小图像的代码:
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{
var st = (ScaleTransform)PdfImage.RenderTransform;
double zoom = e.Delta > 0 ? .2 : -.2;
double newXScaleValue = st.ScaleX + zoom;
double newYScaleValue = st.ScaleY + zoom;
if ((newXScaleValue >= 0.1 && newXScaleValue <= 4) && (newYScaleValue >= 0.1 && newYScaleValue <= 4))
{
st.ScaleX += zoom;
st.ScaleY += zoom;
}
}
您正在应用渲染变换。这种变换在测量和排列步骤之后应用,并且与布局无关。从滚动查看器的角度来看,无论放大或缩小多少,内容的宽度和高度都不会改变。请尝试使用 Image.LayoutTranform。