WPFのInkCanvasで、EditingModeがSelectの時、Selection系イベント(SelectionChanging/SelectionChanged)内でEditingModeを変更しようとすると以下のエラーが発生していました。

型 'MS.Internal.Ink.SelectionEditor' のオブジェクトを型 'MS.Internal.Ink.StylusEditingBehavior' にキャストできません。

xaml

    <InkCanvas Name="hoge" EditingMode="Select"  SelectionChanged="hoge_SelectionChanged" SelectionChanging="hoge_SelectionChanging">
        <Rectangle Width="100" Height="100" Fill="Aqua"></Rectangle>
    </InkCanvas>

c#
下記のコードのままだと、SelectionChangingのところでエラーが発生します。
SelectionChangingをコメントアウトすると、今度はSelectionChangedのところでエラーが発生します。

    private void hoge_SelectionChanged(object sender, EventArgs e)
    {
        this.hoge.EditingMode = InkCanvasEditingMode.None;
    }

    private void hoge_SelectionChanging(object sender, InkCanvasSelectionChangingEventArgs e)
    {
        this.hoge.EditingMode = InkCanvasEditingMode.None;
    }

実現したいことは、InkCanvasのChildrenに追加したオブジェクトのうち、特定のオブジェクトのみ、選択時(そのオブジェクトにマウスが押されたとき)の動作を変えたいと思っています。

いったんは以下の方向性で対応する予定です。
EditingModeがSelectの場合は、MouseDownイベントが発生しないため、PreviewMouseDownイベントとVisualTreeHelper.HitTestを利用して、マウス位置にあるオブジェクトを特定し処理を分岐する。

もし、実現したいことと似たような処理を別の方法で対応された方がいるようでしたら、またその他気になる点などありましたら、補足いただければ幸いです。

  • NET Framework 4.5.2
  • Visual Studio 2015