C# 如何使Wpf scrollviewer根据图像缩放进行调整?

C# 如何使Wpf scrollviewer根据图像缩放进行调整?,c#,wpf,image,xaml,scrollviewer,C#,Wpf,Image,Xaml,Scrollviewer,我创建了一个Wpf用户控件,它显示用户图像,还允许用户使用鼠标滚动放大或缩小图像。我使用scrollviewer控件允许在图像大小大于其容器时滚动。当图像大小大于其容器时,Scrollviewer工作正常。但是当图像大小小于它时,卷轴不会消失。那么,如果图像可以放入容器中,如何使卷轴消失呢。下面是我正在使用的xaml: <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"

我创建了一个Wpf用户控件,它显示用户图像,还允许用户使用鼠标滚动放大或缩小图像。我使用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;
                    }
}
if(Keyboard.IsKeyDown(Key.LeftCtrl)| | Keyboard.IsKeyDown(Key.RightCtrl))
{
var st=(ScaleTransform)PdfImage.RenderTransform;
双变焦=e.增量>0?.2:-.2;
双newXScaleValue=st.ScaleX+zoom;
双newYScaleValue=st.ScaleY+zoom;

如果((newXScaleValue>=0.1&&newXScaleValue=0.1&&newYScaleValue您正在应用渲染变换。这种变换是在测量和排列步骤之后应用的,与布局无关。从滚动查看器的角度来看,内容的宽度和高度永远不会改变,无论您放大或缩小了多少。请尝试使用Image.layout转换。您正在应用渲染转换。这种转换在测量和排列步骤之后应用,并且与布局无关。从滚动查看器的角度来看,无论您放大或缩小多少,内容的宽度和高度都不会改变。请尝试使用Image.LayoutTranform。是否可以添加
PdfImage_MouseWheel
代码?为什么包含内部scrollviewer(和网格)?@Sinatr我已经添加了代码。我尝试直接在图像和其父网格上添加scrollviewer,但两种方法都不起作用。当图像(初始大小)时,滚动条会消失吗是否适合ScrollViewer?@KacperStachowski否,图像的初始大小大于容器大小。因此,滚动条从一开始就存在。是否可以添加
PdfImage\u鼠标滚轮
code?为什么包括内部ScrollViewer(和网格)?@Sinatr我已经添加了代码。我试图将scrollviewer直接添加到图像和其父网格上,但两种方法都不起作用。当图像(初始大小)适合scrollviewer时,滚动条会消失吗?@KacperStachowski否,图像的初始大小大于容器。因此,滚动条从一开始就存在。