Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 限制边界外的平移_C#_Wpf_Xaml_Wpf Controls - Fatal编程技术网

C# 限制边界外的平移

C# 限制边界外的平移,c#,wpf,xaml,wpf-controls,C#,Wpf,Xaml,Wpf Controls,当鼠标指针超出边框时,如何限制画布的平移。。我的平移代码如下: 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.M

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

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>

任何人都可以推荐我

问候,


Viswa.

只需在代码隐藏的MouseMove事件中应用矩阵变换之前添加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);
        }
    }
void Pan\u MouseMove(对象发送器,MouseEventArgs e)
{
如果(!((路径)发送方).IsMouseCaptured返回;
点p=e.MouseDevice.GetPosition(剪贴簿);
如果(p.X>0&&p.Y>0&&p.X
问候,


Viswa

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

let width = image.width;

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

你能展示一些XAML吗?已经添加了XAML代码