По сути, я создал класс «Adorner» для Silverlight, который позволяет пользователю перемещать, масштабировать и вращать любой объект, который он украшает.Это работает так, что Adorner отслеживает любые события мыши на своем дочернем элементе и отвечает соответствующим образом.
Это прекрасно работает для простых элементов, таких как эллипсы и прямоугольники.Но у меня есть пользовательский элемент, который содержит изображение и метку внутри Canvas.
Моя проблема заключается в следующем.Я хочу, чтобы пользователь мог перемещать метку независимо от изображения, но сохранял это движение только как смещение (поэтому я не просто позволяю им отдельно добавлять изображение и метку).Это означает, что метка должна будет использовать свойства Canvas.Left и Canvas.Top.Однако всякий раз, когда я добавляю их, ярлык становится не щелкающим ... т.е. элемент больше не распознает щелчок при нажатии ярлыка, однако он все равно реагирует на нажатие пользователем изображения.
Я предполагаю, что этоимеет какое-то отношение к тому, что элемент Canvas не имеет автоматического управления макетом.
Альтернативой является использование Grid и установка Margin.Top и Margin.Left, которые работают, но не допускают отрицательного поля- поэтому ярлык никогда не сможет появиться выше и слева от изображения, что не подходит для наших нужд.(Это не совсем верно, оно МОЖЕТ появиться сверху и слева, но перестает реагировать на события мыши, когда у него отрицательное поле)
Поэтому мне было интересно, смогу ли я поймать щелчок мыши?событие на ярлыке (MouseLeftButtonDown) и затем каким-то образом притвориться, что оно пришло прямо с холста - я верю, что это решит мою проблему, но я не знаю, возможно ли это.
Если у кого-то есть какие-либо идеи, они будуточень признателен !!
Редактировать: Вот XAML для моего пользовательского элемента.Элемент НЕ запускает событие MouseLeftButtonDown при щелчке TextBlock, но ДЕЙСТВИТЕЛЬНО при щелчке по изображению.
<UserControl x:Class="SitePlanViewer.Components.Visual.BoreholeElement"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Border x:Name="Border" BorderBrush="Transparent" BorderThickness="2" Margin="-5">
<Canvas x:Name="MainCanvas" Margin="5" MinWidth="12" MinHeight="12">
<Image x:Name="BoreholeImage" Source="/Images/BoreholeSymbol.png" VerticalAlignment="Center" Width="12" Height="12" />
<TextBlock x:Name="Label" FontSize="8" Canvas.Left="40" Canvas.Top="20" />
</Canvas>
</Border>
</UserControl>