我使用以下代码允许用户平移两个图像。我想限制平移,以便图像在视图框的开头停止(因此从不存在任何空格)。
我已经查看了我能找到的其他答案(WPF Image Panning Constraints),但我不确定如何使其适应我的代码。我已经尝试检查图像边界是否在网格内(图像为父图像),但它们不是,因此不会发生平移。
不确定问题是否与我平移的方式有关,我使用网格(而不是边框),因为我需要平移两个图像,因此它们显示为一个长图像。视图框就在那里,因为没有它,移动到屏幕上时,屏幕上的图像区域不会被绘制。
任何帮助都将不胜感激。
<UserControl x:Class="RicohToPP_WPF.PanImageControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:RicohToPP_WPF"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" BorderBrush="Red" BorderThickness="1">
<Grid>
<Viewbox x:Name="viewBox1" Stretch="UniformToFill" >
<Grid x:Name="grid">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image x:Name="image1" Stretch="UniformToFill" ClipToBounds="False" Grid.Column="0" MouseLeftButtonDown="image1_MouseLeftButtonDown" MouseLeftButtonUp="image1_MouseLeftButtonUp" MouseMove="image1_MouseMove" Cursor="Cross"/>
<Image x:Name="image2" Stretch="UniformToFill" ClipToBounds="False" Grid.Column="1" Margin="-2,0,0,0" MouseLeftButtonDown="image2_MouseLeftButtonDown" MouseLeftButtonUp="image2_MouseLeftButtonUp" MouseMove="image2_MouseMove" Cursor="Cross" />
</Grid>
</Viewbox>
</Grid>
private void RecalculatePositions(MouseEventArgs e)
{
var tt1 = (TranslateTransform)((TransformGroup)this.image1.RenderTransform).Children.First(tr => tr is TranslateTransform);
var tt2 = (TranslateTransform)((TransformGroup)this.image2.RenderTransform).Children.First(tr => tr is TranslateTransform);
Vector vector = this._startPoint - e.GetPosition(this.grid);
double newX = this._originPoint.X - vector.X;
double newY = this._originPoint.Y - vector.Y;
if (newX <= 0)
{
tt1.X = newX;
tt2.X = newX;
}
if (newY <= 0)
{
tt1.Y = newY;
tt2.Y = newY;
}
}