Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# Silverlight-将鼠标坐标从UI视图传递到ViewModel_C#_.net_Silverlight_Mvvm_Mousemove - Fatal编程技术网

C# Silverlight-将鼠标坐标从UI视图传递到ViewModel

C# Silverlight-将鼠标坐标从UI视图传递到ViewModel,c#,.net,silverlight,mvvm,mousemove,C#,.net,Silverlight,Mvvm,Mousemove,我将Silverlight与MVVM一起使用(使用Caliburn.Micro)。 我在视图中创建了一个简单的矩形,如下所示: <Rectangle x:Name="Rectangle2" cal:Message.Attach="[Event MouseMove] = [Action MouseMoved($eventArgs)]" Fill="#FFE2F5FF" HorizontalAlignment="Left" Height="220" Margin="195,43,0,0" St

我将Silverlight与MVVM一起使用(使用Caliburn.Micro)。 我在视图中创建了一个简单的矩形,如下所示:

<Rectangle x:Name="Rectangle2" cal:Message.Attach="[Event MouseMove] = [Action MouseMoved($eventArgs)]" Fill="#FFE2F5FF" HorizontalAlignment="Left" Height="220" Margin="195,43,0,0" Stroke="Black" VerticalAlignment="Top" Width="195" />
出现的坐标是绝对坐标,因为我在GetPosition中设置了null。 如何使它们相对于矩形?(因此矩形的左上角为0,0) 据我所知,这可以在ViewModel不知道视图中的UIElements的情况下完成

谢谢,
Guy

通常我建议将
Rectangle2
传入
GetPosition
调用(
var point=mouseEventArgs.GetPosition(Rectangle2);
),但你是说你没有对该对象的引用?编辑:鼠标移动事件没有传递给发件人吗?你在参加活动时会把它扔出去吗?如果是这样,保留发送者并将其传递到
GetPosition
调用中。我可以有一个引用,但如果我没有弄错的话,规则是ViewModel不知道UI中的元素,反之亦然。我试图找到一种方法,使坐标与UIElement相对,而不传递UIElement。但是现在我想起来了,我不是指UI上的某个元素,而是指一个普通的UIElement。你认为呢?就我而言,跟踪鼠标位置是视图的一部分。视图将把相关位置向下传递给视图模型(如果确实需要)。我不认为您的“视图”必须仅作为XAML的一部分存在。也许这是可能的,但我认为这不值得为此而竭尽全力。我不认为当你收到一个UI事件时,你收到了它的发送者(事实上,这是标准的),这是一种违反。让视图句柄确定相对坐标,然后将该值发送到ViewModel。
public void MouseMoved(MouseEventArgs mouseEventArgs)
{
        var point = mouseEventArgs.GetPosition(null);
        String str = string.Format("({0}\t{1})",point.X,point.Y);
        MVVMCoords = str;
}