WPF 无法在 ScrollViewer 中滚动图像
WPF Cannot scroll an image inside a ScrollViewer
我尝试在 window 中显示图像:
<Window x:Class="Problem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<StackPanel Orientation="Vertical">
<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible">
<Image Source="cat.jpg" Stretch="Uniform">
<Image.LayoutTransform>
<RotateTransform Angle="90" />
</Image.LayoutTransform>
</Image>
</ScrollViewer>
</StackPanel>
</DockPanel>
</Window>
其中 cat.jpg 是一张 1920x1080 的图像。
结果如下:
如您所见,虽然我看不到完整的猫头,但 VerticalScrollbar 已禁用。而且,HorisontalScrollBar是不可见的。
我的问题是:如何启用滚动条以便在我的图像上滚动?
删除 StackPanel
。它赋予其内容无限 space,因此 ScrollViewer
具有图像的高度。如果你需要在图像下堆叠一些东西,在 ScrollViewer
:
中创建一个 StackPanel
<Window x:Class="Problem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible">
<StackPanel>
<Image Source="cat.jpg" Stretch="Uniform">
<Image.LayoutTransform>
<RotateTransform Angle="90" />
</Image.LayoutTransform>
</Image>
</StackPanel>
</ScrollViewer>
</DockPanel>
我遇到了同样的问题,但是使用了自定义图像 class,我只通过使用 protected override void OnRender(DrawingContext dc)
函数中的 DrawingContext 来渲染绘图。当时我不明白,我要么需要设置图像的大小(设置宽度和高度属性),要么从 drawingContext 创建一个新图像并将其作为图像的来源,以便调整实际图像的大小。
我从这里得到了答案:Get images from DrawingGroup 我解决这个问题的方法是每次使用图像的渲染功能时更改属性:
DrawingImage drawingImage = new DrawingImage(mBackingStore);
Width = drawingImage.Width;
Height = drawingImage.Height;
我尝试在 window 中显示图像:
<Window x:Class="Problem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<StackPanel Orientation="Vertical">
<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible">
<Image Source="cat.jpg" Stretch="Uniform">
<Image.LayoutTransform>
<RotateTransform Angle="90" />
</Image.LayoutTransform>
</Image>
</ScrollViewer>
</StackPanel>
</DockPanel>
</Window>
其中 cat.jpg 是一张 1920x1080 的图像。
结果如下:
如您所见,虽然我看不到完整的猫头,但 VerticalScrollbar 已禁用。而且,HorisontalScrollBar是不可见的。
我的问题是:如何启用滚动条以便在我的图像上滚动?
删除 StackPanel
。它赋予其内容无限 space,因此 ScrollViewer
具有图像的高度。如果你需要在图像下堆叠一些东西,在 ScrollViewer
:
StackPanel
<Window x:Class="Problem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<ScrollViewer VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible">
<StackPanel>
<Image Source="cat.jpg" Stretch="Uniform">
<Image.LayoutTransform>
<RotateTransform Angle="90" />
</Image.LayoutTransform>
</Image>
</StackPanel>
</ScrollViewer>
</DockPanel>
我遇到了同样的问题,但是使用了自定义图像 class,我只通过使用 protected override void OnRender(DrawingContext dc)
函数中的 DrawingContext 来渲染绘图。当时我不明白,我要么需要设置图像的大小(设置宽度和高度属性),要么从 drawingContext 创建一个新图像并将其作为图像的来源,以便调整实际图像的大小。
我从这里得到了答案:Get images from DrawingGroup 我解决这个问题的方法是每次使用图像的渲染功能时更改属性:
DrawingImage drawingImage = new DrawingImage(mBackingStore);
Width = drawingImage.Width;
Height = drawingImage.Height;