2012-10-07 100 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(); 
    }