Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ScrollViewer C#WPF中设置大小调整后图像的滚动?_C#_Wpf_Image_Scrollbar_Scrollviewer - Fatal编程技术网

如何在ScrollViewer C#WPF中设置大小调整后图像的滚动?

如何在ScrollViewer C#WPF中设置大小调整后图像的滚动?,c#,wpf,image,scrollbar,scrollviewer,C#,Wpf,Image,Scrollbar,Scrollviewer,我有一个内置图像的滚动查看器。 可以使用Image.RenderTransform.ScaleTransform通过按按钮调整图像大小 我需要的是正确的滚动条大小,因为当图像缩放时,滚动条会对图像大小的变化做出反应,但是,完全滚动图像和查看整个图像是不够的,所以图像缩放时,部分图像会消失。请让我知道,这次我犯了什么可怕的错误,因为我尝试了许多StackOverflow建议,但我仍然不理解ScrollViewer应该如何操作的逻辑。提前谢谢 这里是我的XAML设置的一小部分 下面是如何调整图

我有一个内置图像的滚动查看器。 可以使用Image.RenderTransform.ScaleTransform通过按按钮调整图像大小

我需要的是正确的滚动条大小,因为当图像缩放时,滚动条会对图像大小的变化做出反应,但是,完全滚动图像和查看整个图像是不够的,所以图像缩放时,部分图像会消失。请让我知道,这次我犯了什么可怕的错误,因为我尝试了许多StackOverflow建议,但我仍然不理解ScrollViewer应该如何操作的逻辑。提前谢谢

这里是我的XAML设置的一小部分


下面是如何调整图像大小

private void btnZoom\u单击(对象发送方,路由目标)
{
var transformGroup=(transformGroup)imgViewer.RenderTransform;
var st=(ScaleTransform)transformGroup.Children[0];
如果((圣斯卡利+0.2)>3 | |(圣斯卡利+0.2)>3)
返回;
st.ScaleX+=0.2;
st.ScaleY+=0.2;
imgViewer.LayoutTransform=st;
}
私有无效btnZoomOut_单击(对象发送者,路由目标e)
{
var transformGroup=(transformGroup)imgViewer.RenderTransform;
var st=(ScaleTransform)transformGroup.Children[0];
如果((st.ScaleX-0.2)<0.8 | |(st.ScaleY-0.2)<0.8)
返回;
st.ScaleX+=-0.2;
st.ScaleY+=-0.2;
imgViewer.LayoutTransform=st;
}

多亏了克莱门斯的评论,我成功地修改了我的代码,现在它适合我了。请原谅我,如果这个解决方案是原始的和不正确的,也许它会帮助别人

<Grid>
    <ScrollViewer x:Name="svImageViewer" Margin="100,100,100,100" Width="{Binding svImageViewerWidth}" Height="{Binding svImageViewerHeight}"  VerticalScrollBarVisibility="Auto"   HorizontalScrollBarVisibility="Auto"  Visibility="Hidden" Grid.Row="0">
        <Image x:Name="imgViewer"  VerticalAlignment="Center"  HorizontalAlignment="Center"  MouseWheel="imgViewer_MouseWheel">
                <Image.LayoutTransform>
                    <ScaleTransform x:Name="ScaleTransform" CenterX="0.5" CenterY="0.5" ScaleX="{Binding ScaleX}" ScaleY="{Binding ScaleY}"/>
                </Image.LayoutTransform>
            </Image>
    </ScrollViewer>
</Grid>

也许,缩放后需要重置图像位置,我添加了我的解决方案

private void btnZoom\u单击(对象发送方,路由目标)
{
var st=(ScaleTransform)imgViewer.LayoutTransform;
如果((圣斯卡利+0.2)>3 | |(圣斯卡利+0.2)>3)
返回;
st.ScaleX+=0.2;
st.ScaleY+=0.2;
imgViewer.LayoutTransform=st;
}
私有无效btnZoomOut_单击(对象发送者,路由目标e)
{
var st=(ScaleTransform)imgViewer.LayoutTransform;
如果((st.ScaleX-0.2)<0.8 | |(st.ScaleY-0.2)<0.8)
返回;
st.ScaleX+=-0.2;
st.ScaleY+=-0.2;
imgViewer.LayoutTransform=st;
}
公共无效重置ImagePosition()
{
var st=(ScaleTransform)imgViewer.LayoutTransform;
st.ScaleX=1;
st.ScaleY=1;
imgViewer.LayoutTransform=st;
svImageViewer.ScrollToHome();
}
公共void SetControlSizes()
{
gridPreviewWidth=Window.ActualWidth-30;
svImageViewerHeight=Window.ActualHeight-200;
svImageViewerWidth=Window.ActualWidth-100;
}

不要同时设置图像的RenderTransform和LayoutTransform。LayoutTransform只能工作并保持ScrollViewer同步。