J'ai implémenté un glisser-déposer qui fonctionne principalement dans mon application Silverlight 4. Une fois que les utilisateurs ont déposé les formes sur la toile, j'ai voulu utiliser Size & Child Decorators. J'ai essayé d'implémenter l'exemple de code. Le code ci-dessous est la section de problème de beaucoup plus grande application.Recherche d'objets enfants dans l'objet ViewBox/Canvas
Xmal -
<ScrollViewer Grid.RowSpan="1" Grid.Row="2" Grid.ColumnSpan="2" Grid.Column="2" Name="scrollViewer">
<Viewbox Margin="0" MinWidth="400" MinHeight="500"
HorizontalAlignment="Left" VerticalAlignment="Top" Name="ViewBoxTestBuild">
<Canvas x:Name="Camera1Canvas" telerikDragDrop:RadDragAndDropManager.AllowDrop="True"
Width="1200" Height="768" MouseLeftButtonDown="Camera1Canvas_MouseLeftButtonDown">
<Image x:Name="Camera1Image" Source="timemagadj.jpg" Canvas.ZIndex="-1"
HorizontalAlignment="Left" VerticalAlignment="Top" />
<local:Three_Line_Graphic x:Name="threeLineEditTool"
HorizontalAlignment="Left" Canvas.Left="594" Canvas.Top="621" />
<l:Adorner x:Name="adorn" Canvas.ZIndex="100" />
</Canvas>
</Viewbox>
</ScrollViewer>
C# code -
private void Camera1Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var sendingObj = sender as Canvas;
if (sendingObj == null) return;
foreach (UserControl l in VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null), sendingObj))
{
if (l.Parent == Camera1Canvas)
{
adorn.AdornedElement = l as FrameworkElement;
adorn.adorned_MouseLeftButtonDown(l, e);
break;
}
}
base.OnMouseLeftButtonDown(e);
}
Mon problème est que lorsque VisualTreeHelper.FindElementsInHostCoordinates est appelé événement de clic gauche de la souris, il retourne aucun élément lorsque je clique sur un objet. Je suis sûr que c'est un problème de mappage des coordonnées, mais comme c'est nouveau pour moi, je ne sais pas comment y remédier.
Votre suggestion revient toujours pas d'éléments. –
Edité pour montrer une autre manière. Le système de coordonnées SL est un peu génial et a plusieurs bizarreries. – Stephan
qui a bien fonctionné avec une modification: "VisualTreeHelper.FindElementsInHostCoordinates (pnt, sendingObj);" –