Teraz som zistil, ze ked kod:
Canvas.SetZIndex(sender as UIElement, 105);
umiestnim nad unSelectAllShapes(); tak to ide. Zaujimave je, ze v tejto funkcii v podstate nic nerobim. Ako keby mu vadilo, ze sa zmeni nejaky atribut objektu.
Teraz som zistil, ze ked kod:
Canvas.SetZIndex(sender as UIElement, 105);
umiestnim nad unSelectAllShapes(); tak to ide. Zaujimave je, ze v tejto funkcii v podstate nic nerobim. Ako keby mu vadilo, ze sa zmeni nejaky atribut objektu.
Ja mam tiez obdobne definovany vlastny Shape. Tiez si cez tlacitko v hlavnom okne pridam tento moj Shape do canvas.children. Na moj vlastny Shape nabindujem udalost MouseDown.
void myShape_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
{
if (_mode == Mode.PaintMode)
return;
unSelectAllShapes();
if (!(sender as ImyShape).isSelected())
(sender as ImyShape).Select();
else
(sender as ImyShape).UnSelect();
_selectedShapeForMoving = (sender as ImyShape);
_selectedShapes.Add(sender as ImyShape);
Canvas.SetZIndex(sender as UIElement, 105);
}
}
Tento sposob nefunguje. Obcas sa vsak stane ze zareaguje spravne. Pokial by som mal tuto udalost vytvorenu priamo v konstruktore mojho Shapu tak to ide. Ale ak tuto udalost vytvorim po vytvoreni objektu tak to blbne.
Teraz som zistil, ze ked robim Hit testovanie v udalosti Canvasu MouseDown tak to ide.
HitTestResult result = VisualTreeHelper.HitTest(canvas1, position);
if (result.VisualHit is myRectangleAndEllipse)
Canvas.SetZIndex(result.VisualHit as UIElement, 105);
#15 Zed_1
Mne to tiez bezi ked pouzivam rectangle! Ja ale mam vlastne triedy, ktore dedia od Shape a definujem si pozadovanu geometriu. Potom to proste nefunguje. ZIndex sa nastavi, aj ked ho vycitam je nastaveny spravne ale dany Shape sa neprekresli.
#12 Zed_1
Nie, tie male biele stvorce su komponenty na resizovanie tvarov a oni maju pevne nastaveny ZIndex , ktory je najvacsi. Ziadny objekt, ktory sa kresli (stvorec, elipsa, polygon, obrazok atd.) nemoze mat nikdy vacsi ZIndex ako tie male stvorceky.