2012-10-07 96 views
0

我有WPF应用程序与画布和尺子。现在我需要将Canvas OnMouseMove(MouseEventArgs e)传递给标尺,以反映其规模上的鼠标移动。两个控件在初始化时独立创建,它们彼此不知道。如何将画布上的鼠标位置转移到标尺?如何将画布上的鼠标位置转移到标尺?

回答

0

MouseEventArgs有一个GetPosition方法,它允许您传递任何IInputElement作为参数,并返回鼠标指针相对于指定元素的位置。将您的标尺作为参数值传递。

+0

感谢您的帮助,但你忘了我的控制没有联系。 – user1135594

0

我找到了解决方案,但我仍然有疑问。在我看来有点复杂:

  1. 帆布为 “父” 控件包含这段代码:

    公共点MousePosition { 得到{(点)的GetValue(MousePositionProperty); } {SetValue(MousePositionProperty,value);} set {SetValue(MousePositionProperty,value); }}

    public static readonly DependencyProperty MousePositionProperty = 
         DependencyProperty.Register("MousePosition", typeof(Point), typeof(DesignerCanvas), new UIPropertyMetadata(point)); 
    
    protected override void OnMouseMove(MouseEventArgs e) 
    { 
        base.OnMouseMove(e); 
        MousePosition = e.GetPosition(this); 
    

    }

  2. 标尺包含以下代码:

    公共点位置 { 得到{(点)的GetValue(PositionProperty); } {SetValue(PositionProperty,value);} set {SetValue(PositionProperty,value); }}

    public static readonly DependencyProperty PositionProperty = 
        DependencyProperty.Register("Position", typeof(Point), typeof(HorizontalRuler), new UIPropertyMetadata(defaultMousePoint, 
         new PropertyChangedCallback(PositionPropertyChangedCallback))); 
    
    private static void PositionPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
    { 
        HorizontalRuler horizontalRuler = (HorizontalRuler)sender; 
        horizontalRuler.InvalidateVisual(); 
    }