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