0

ビューモデルのパラメーターに位置がバインドされているカスタム UserControl があります。

<Canvas Name="CursorCanvas">
    <ctrl:HandCursor x:Name="RightHandCursor" State="{Binding RightHandState}" Visibility="{Binding IsHandTracking, Converter={StaticResource BoolToVisibilityConverter}}" Canvas.Top="{Binding RightHandY}" Canvas.Left="{Binding RightHandX}" />
</Canvas>

このコントロール内で HitTest を実行して、その下に何があるかを判断します。現在、この HitTest は 1 秒間隔の DispatcherTimer に接続されています。Canvas 上を移動するときに HitTest を実行するようにコントロールに指示したいのですが、移動中の UserControl で Canvas の位置の更新をキャプチャする方法が見つかりません。

上で定義した「HandCursor」UserControl のコード ビハインドで Canvas.Top/Left の動きの更新をキャプチャするにはどうすればよいですか?

どうもありがとう!

4

1 に答える 1

3

および添付プロパティのプロパティ メタデータをオーバーライドすることで、 PropertyChangedCallbackを追加できます。Canvas.LeftCanvas.Top

static HandCursor()
{
    Canvas.LeftProperty.OverrideMetadata(
        typeof(HandCursor),
        new FrameworkPropertyMetadata(
            (o, e) => ((HandCursor)o).LeftPropertyChanged((double)e.NewValue)));

    Canvas.TopProperty.OverrideMetadata(
        typeof(HandCursor),
        new FrameworkPropertyMetadata(
            (o, e) => ((HandCursor)o).TopPropertyChanged((double)e.NewValue)));
}

private void LeftPropertyChanged(double left)
{
    ...
}

private void TopPropertyChanged(double top)
{
    ...
}
于 2012-10-05T20:19:48.957 に答える