WPF图像平移限制

时间:2018-04-12 09:19:04

标签: wpf

我使用以下代码允许用户平移两个图像。我想限制平移,以便图像在视图框的开头停止(因此从不存在任何空格)。

我已经查看了我能找到的其他答案(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;
    }
}

0 个答案:

没有答案