Добрый день.
Возникла задача иметь на одном экране несколько областей, на котолрых нужно свободным образом позиционировать некоторое количество объектов(Rectangle, например), а так же, передвигать эти объекты между областями. В качестве таких областей выбрал Canvas.
Если с DragAndDrop элементов внутри Canvas проблем нет, то как сдеать их перемещение между Canvas я не представляю. В принципе можно определить, что за Cancas находится под курсором, но, когда тянешь объект на другой Canvas, этот объект под него "заплывает".
Как быть, куда копать? Надеюсь, кто нибудь поможет с советом....
В качестве наброска:
| Код | <Grid Name="MainGrid" PointerMoved="Rectangle_PointerMoved" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions>
<Canvas Name="Canv0" Background="Gray" Grid.Column="0"> <Rectangle Width="80" Height="80" Fill="Red" Canvas.Left="98" Canvas.Top="102" ManipulationDelta="Rectangle_ManipulationDelta" ManipulationMode="TranslateX , TranslateY" ManipulationCompleted="Rectangle_ManipulationCompleted" /> </Canvas> <Canvas Name="Canv1" Background="LightGray" Grid.Column="1"></Canvas> <Canvas Name="Canv3" Background="LightBlue" Grid.Column="2"></Canvas> </Grid>
|
| Код | private void Rectangle_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { Rectangle myRectangle = (Rectangle)sender;
Canvas.SetLeft(myRectangle Canvas.GetLeft(myBorder) + e.Delta.Translation.X); Canvas.SetTop(myRectangle, Canvas.GetTop(myBorder) + e.Delta.Translation.Y); }
private void Rectangle_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) { Rectangle myRectangle = (Rectangle)sender; var position = myRectangle.TransformToVisual(Window.Current.Content).TransformPoint(new Point()); var elements = VisualTreeHelper.FindElementsInHostCoordinates(position, MainGrid); foreach (UIElement element in elements) { if (element is Canvas) { // code } } }
|
|