0

CanvasとRulerを使用したWPFアプリケーションがあります。次に、Canvas OnMouseMove(MouseEventArgs e)をルーラーに渡して、マウスの動きをそのスケールに反映させる必要があります。両方のコントロールは初期化中に独立して作成され、お互いを認識しません。キャンバス上のマウスの位置をルーラーに転送するにはどうすればよいですか?

4

2 に答える 2

0

MouseEventArgsには、任意のIInputElementをパラメーターとして渡すことができるGetPositionメソッドがあり、指定された要素に対するマウスポインターの位置を返しますRulerをパラメーター値として渡します。

于 2012-10-07T18:09:45.887 に答える
0

私は解決策を見つけましたが、まだ疑問があります。私には少し複雑に思えます:

  1. 「親」コントロールとしてのCanvasには、次のコードが含まれています。

    public Point MousePosition {get {return(Point)GetValue(MousePositionProperty); } 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. ルーラーには次のコードが含まれています。

    public Point Position {get {return(Point)GetValue(PositionProperty); } 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();
    }
    
于 2012-10-08T08:42:48.340 に答える