XAMLなしの以下のようなコードで、Pageにイベントが来なくてハマりました。
public class Page : UserControl { public Page() { MouseLeftButtonDown += (sender, e) => Debug.WriteLine("Page"); } }
何か置かないといけないのかと思ってCanvasを置いてみましたが変化ありません。
var canvas = new Canvas(); canvas.MouseLeftButtonDown += (sender, e) => Debug.WriteLine("Canvas"); Content = canvas;
TextBlockを置いてみると、その上だけCanvasもPageも反応しました。
canvas.Children.Add(new TextBlock { Text = "TextBlock" });
XAMLを使ったプロジェクトでは何も置かなくても反応します。よく見るとBackgroundが設定されています。
<Grid x:Name="LayoutRoot" Background="White">
Canvasに設定したところ無事にイベントが捕捉出来ました。Pageに設定してもダメでした。
id:atsushienoさんからご指摘がありましたが、RectangleなどのShapeでもFillをnullにしておくとStrokeにしかイベントが来ません。Excelのオートシェイプと同じ挙動だと考えられそうです。