Документация для Mouse.DirectlyOver
гласит:
Элементы управления могут состоять из нескольких элементов.DirectlyOver сообщает о конкретном элементе в составном элементе управления, на котором находится указатель мыши, а не сам элемент управления.Например, в зависимости от того, над какой частью Button находится указатель, свойство DirectlyOver может сообщать TextBox свойства Content или ButtonChrome.
Другими словами: кнопка состоит из несколькихподэлементы, такие как ButtonChrome и TextBlock (обычно это не TextBox - я думаю, что это опечатка на странице MSDN).Когда вы вызываете Mouse.DirectlyOver
, вы, вероятно, получаете один из этих элементов, а не Button.
Поскольку эти элементы не связаны с Canvas (они связаны с чем-то в шаблоне элемента управления Button,скорее всего Grid), установка свойств, связанных с Canvas.Left и Canvas.Top, не будет иметь никакого эффекта.
Возможно, вы захотите пройтись по визуальному дереву (используя VisualTreeHelper.GetParent ) доВы найдете то, что вас интересует, перетаскивая.Как вы определяете, интересуетесь ли вы тем или иным элементом, зависит от вас.Вы можете идти до тех пор, пока не найдете что-то, что связано с вашим Canvas, или вы можете просто пойти, пока не найдете что-то, относящееся к одному из заданных типов типов (остановка, когда вы найдете что-то, что происходит от Control, может стать подходящим местом для запуска).