我试图通过创建裁剪应用程序来自学如何编写WPF以及使用MVVM框架。我将让用户绘制一个位于图像上的画布内的矩形,并且该图像中的边界将被裁剪并在另一个图像控件中预览。但我遇到了如何在不使用代码的情况下进行编码的问题。我遇到的一个问题是如何绑定MouseLeftButtonUp,MouseLeftButtonDown和MouseMove等鼠标事件来获取裁剪图像的尺寸。我在网上搜索并读到我可以使用Expression Blend触发器。其他解决方案对我来说并不陌生,因为我不太了解更复杂的编码,但我正在努力学习。如果你能告诉我如何实现这一点,我将不胜感激。此外,如果您可以指向我一本好书或在线文章,那么我可以学习更好的代码,而无需使用代码。下面是我用来获取矩形尺寸的代码片段:
private void LoadedImage_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
{
double x = e.GetPosition(BackPanel).X;
double y = e.GetPosition(BackPanel).Y;
selectionRectangle.SetValue(Canvas.LeftProperty, Math.Min(x, anchorPoint.X));
selectionRectangle.SetValue(Canvas.TopProperty, Math.Min(y, anchorPoint.Y));
selectionRectangle.Width = Math.Abs(x - anchorPoint.X);
selectionRectangle.Height = Math.Abs(y - anchorPoint.Y);
if (selectionRectangle.Visibility != Visibility.Visible)
selectionRectangle.Visibility = Visibility.Visible;
}
}
private void LoadedImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (isDragging == false)
{
anchorPoint.X = e.GetPosition(BackPanel).X;
anchorPoint.Y = e.GetPosition(BackPanel).Y;
isDragging = true;
}
}
private void LoadedImage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (isDragging)
{
isDragging = false;
if (selectionRectangle.Width > 0)
{
Crop.Visibility = System.Windows.Visibility.Visible;
Crop.IsEnabled = true;
Cut.IsEnabled = true;
}
if (selectionRectangle.Visibility != Visibility.Visible)
selectionRectangle.Visibility = Visibility.Visible;
}
}
此事件附加到Grid,它是要裁剪的图像的父级。我假设绑定也将绑定到Grid。我看到的另一个问题是,即使我能够绑定mouseButtonEvents,我还需要找到一种方法来获取我的矩形在画布中的位置,因为我无法使用MouseEvent位置属性。此外,由于MVVM只允许视图模型通过绑定与视图对话,我需要找到一种方法来设置我的矩形的名称" selectionRectangle"当鼠标移动时。提前谢谢