2014-11-28 1 views
0

에서 패닝 제한 .. 내 패닝 코드는 다음과 같습니다 :내가 캔버스 패닝 제한 할 수 있습니다 어떻게 국경

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.

+0

는 일부 XAML을 보여줄 수를 다음과 같이 코드는? – Jawahar

+0

Xaml 코드가 추가되었습니다. –

답변

0

코드 숨김 코드에서 MouseMove 이벤트에 매트릭스 변환을 적용하기 전에 조건 만 추가하면됩니다. 이미지의 X 경계는 다음과 같은 공식을 찾을 수 있습니다

0

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); 
     } 
    } 

감사합니다,

Viswa :

let width = image.width; 

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