我有一个项目是图片视图,允许用户在窗口中拖动图片,但这有问题。
当画布中的图片被拖到顶部时,它会覆盖标题。我不知道如何解决这个问题,请帮忙!!!
namespace OfficeStyleWindowProject
{
public partial class Window1 : MetroWindow
{
public Window1()
{
}
Point LastPos;
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
//移动画布
Point curr_pos = e.GetPosition(this);
Canvas grid = sender as Canvas;
if ((e.LeftButton == MouseButtonState.Pressed))
{
Matrix m = grid.RenderTransform.Value;
m.Translate(curr_pos.X - LastPos.X, curr_pos.Y - LastPos.Y);
grid.RenderTransform = new MatrixTransform(m);
}
LastPos = curr_pos;
}
private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
LastPos = e.GetPosition(this);
}
}
}
<Controls:MetroWindow x:Class="OfficeStyleWindowProject.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
Title="Office Style Window"
Height="300"
Width="300" Panel.ZIndex="1000"
WindowTitleBrush="Green">
<Canvas Width="200" Height="200"
Background="Red"
MouseMove="Canvas_MouseMove"
MouseLeftButtonDown="Canvas_MouseLeftButtonDown">
</Canvas>
</Controls:MetroWindow>
答案 0 :(得分:0)
您可以检查鼠标或矩形的位置,并检查窗口的位置。如果位置不合适,请不要重新渲染画布。
Point LastPos;
private void Canvas_MouseMove(object sender, MouseEventArgs e)
{
Point curr_pos = e.GetPosition(this);
Canvas grid = sender as Canvas;
if ((e.LeftButton == MouseButtonState.Pressed))
{
double top = grid.GetTop();
var diffY = curr_pos.Y - LastPos.Y;
//If new position of canvas will be smaller then title bar size, do not transform.
if((top + diffY) < 26)
return;
Matrix m = grid.RenderTransform.Value;
m.Translate(curr_pos.X - LastPos.X, curr_pos.Y - LastPos.Y);
grid.RenderTransform = new MatrixTransform(m);
}
LastPos = curr_pos;
}