我有一个image
内部 a border
,我想在不同时间在图像框中显示图像源的不同部分。具体来说,当某个文本框获得焦点时,我想更改图像,使其缩放到图像内容的某个部分。
这是 XAML:
<Border BorderBrush="Silver" BorderThickness="1" Grid.Column="5" Height="504"
HorizontalAlignment="Left" Margin="20,116,0,0" Name="border1"
VerticalAlignment="Top" Width="410" ClipToBounds="True">
<Image Height="493" Name="image5" Stretch="Fill" Width="390"
ClipToBounds="True" BindingGroup="{Binding}"
Clip="{Binding ElementName=border1}"
Cursor="Hand" StretchDirection="Both" />
</Border>
例如,我的图像源是 2550 x 3320 像素。我希望该image
框在从点 1755,300 开始的矩形中显示源,宽度为 650,高度为 230。我不想使用 CloneBitmap 剪切该矩形并显示它,因为我还设置了手动缩放为此image
,用户可以使用鼠标滚轮放大和缩小并单击和拖动以平移图像。在我们缩放到所需区域后,我仍然希望允许这样做。
更新: 我已经尝试实现科林史密斯的答案,但是每当我更改滚动查看器的偏移量时,它都会切割图像,所以如果我稍后移动(单击并拖动以平移)它,它就是空白空间。我以前只使用滚动查看器内的图像进行此工作,但现在我在边框内的滚动查看器内有一个图像。因为我现在已经设置了边框,所以我的缩放和平移需要边框。
我更新的 XAML:
<Border BorderBrush="Silver" BorderThickness="1" Grid.Column="5" Height="504"
HorizontalAlignment="Left" Margin="20,116,0,0" Name="border1"
VerticalAlignment="Top" Width="410" ClipToBounds="True">
<ScrollViewer x:Name="image5scroll" VerticalScrollBarVisibility="Hidden"
HorizontalScrollBarVisibility="Hidden">
<Image Height="493" Name="image5" Stretch="Fill" Width="390"
ClipToBounds="True" BindingGroup="{Binding}"
Clip="{Binding ElementName=image5scroll}" Cursor="Hand"
StretchDirection="Both" />
</ScrollViewer>
</Border>
和后面的代码:
public void imageZoom(Element element, int index)
{
if (element.Rectangle.Left - 100 > 0)
{
image5scroll.ScrollToHorizontalOffset(element.Rectangle.Left - 100);
image5scroll.Width = element.Rectangle.Width + 200;
image5scroll.Height = element.Rectangle.Height + 200;
border1.Width = image5scroll.Width;
border1.Height = image5scroll.Height;
image5.Width = image5scroll.Width;
image5.Height = image5scroll.Height;
image5.Stretch = System.Windows.Media.Stretch.None;
}
else
{
image5scroll.ScrollToHorizontalOffset(0);
}
if (element.Rectangle.Top - 100 > 0)
{
image5scroll.ScrollToVerticalOffset(element.Rectangle.Top - 100);
}
else
{
image5scroll.ScrollToVerticalOffset(0);
}
}