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代码