限制平移出边框

本文关键字:边框 移出 | 更新日期: 2023-09-27 18:32:23

当鼠标指针超出边框时,如何限制画布的平移。.我的平移代码如下:

private Point origin;
private Point start;
void Path_MouseMove(object sender, MouseEventArgs e)
{
    if (rBtnPanning.IsChecked.Value)
    {
        if (!((Path)sender).IsMouseCaptured) return;
        Point p = e.MouseDevice.GetPosition(clipBorder);
        Matrix m = CanvasPanel.RenderTransform.Value;
        m.OffsetX = origin.X + (p.X - start.X);
        m.OffsetY = origin.Y + (p.Y - start.Y);
        CanvasPanel.RenderTransform = new MatrixTransform(m);
    }
}
void path_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (((Path)sender).IsMouseCaptured) return;
    ((Path)sender).CaptureMouse();
    start = e.GetPosition(clipBorder);
    origin.X = CanvasPanel.RenderTransform.Value.OffsetX;
    origin.Y = CanvasPanel.RenderTransform.Value.OffsetY;
}
void path_MouseLeftBtnUp(object sender, MouseButtonEventArgs e)
{
    ((Path)sender).ReleaseMouseCapture();
}

下面添加了 Xaml 代码:因为它有边框之间的画布。我需要限制平移,当我按住 MouseLeftDown 并拖出边框时,它不应该移动。

<Window x:Class="DummyTestWPF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="1000" Width="1000" Background="Bisque">
<Grid  Height="1000" Width="1000" x:Name="grid">
    <Border x:Name="clipBorder" Height="810" Width="810" BorderThickness="2" BorderBrush="Black" ClipToBounds="True">
    <Canvas x:Name="CanvasPanel" Height="800" Width="800" Background="Transparent" >
        </Canvas>
    </Border>
    <Grid>
        <Button Content="Original Size" Height="23" Name="btn_Original" Width="75" Click="btn_Original_Click" Margin="4,4,921,973" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="4,59,0,0" Name="txtNoOfZones" VerticalAlignment="Top" Width="120" MaxLength="2" PreviewTextInput="txtNoOfZones_PreviewTextInput" />
        <Label Content="Enter a number below for No. of Zones" Height="28" HorizontalAlignment="Left" Margin="4,33,0,0" Name="label1" VerticalAlignment="Top" Width="220" FontFamily="Vijaya" FontSize="15" FontWeight="Bold" FontStyle="Normal" />
        <Button Content="Zones" Height="23" HorizontalAlignment="Left" Margin="130,58,0,0" Name="btnNoOfZones" VerticalAlignment="Top" Width="41" Click="btnNoOfZones_Click" />
    </Grid>
</Grid>

请任何人都可以建议我。

问候

维斯瓦。

限制平移出边框

只需在代码隐藏的代码中应用矩阵转换之前添加 if 条件即可。代码如下:

void Pan_MouseMove(object sender, MouseEventArgs e)
    {
        if (!((Path)sender).IsMouseCaptured) return;
        Point p = e.MouseDevice.GetPosition(clipBorder);
        if (p.X > 0 && p.Y > 0 && p.X < clipBorder.ActualWidth && p.Y < clipBorder.ActualHeight)
        {
            Matrix m = CanvasPanel.RenderTransform.Value;
            m.OffsetX = origin.X + (p.X - start.X);
            m.OffsetY = origin.Y + (p.Y - start.Y);
            CanvasPanel.RenderTransform = new MatrixTransform(m);
        }
    }

问候

维斯瓦

图像的 x 边框可以用以下公式找到:

let width = image.width;
borderX = Math.ceil(((width * this.currentScale) - width) / (2 * this.currentScale) );