2015-08-14 11 views
5

Mam klasę z 3 członkami, tylko dwie z nich są istotne; jeden jest wielobokiem, a drugi int [] współrzędnych. Chcę być świadomy tego, że współrzędne odpowiadają wielobokowi, ale naprawdę utknąłem tutaj.Uzyskaj klasę nadrzędną członka w MouseEvent

Znając współrzędne wielokąta, mam na myśli abstrakcyjne współrzędne sześcianu, które przechowuję w klasie wzdłuż tego wielokąta i które wykorzystuję do zadeklarowania jej Punktów.

Współrzędne to X, Y i Z i przechowuje je w int [3] w poniższej klasie. I to, co chcę zrobić, to aby móc złapać tych współrzędnych sześciennych każdym zdarzenie jest wywoływane .:

public class Tile 
{ 
    public int[] coords; 
    public Polygon hex; 
    public List<object> content; 
} 

Sposób wypełniacz Lista:

 foreach (int[] i in ValidCoordinates) 
     { 
      int[] coords = i; 

      double apotema = Math.Sqrt(Math.Pow(20, 2) - Math.Pow(20/2, 2)); 

      double auxX = x + (coords[0] * (20 * 3/2)); 
      double auxY = y + (coords[0] * apotema + (coords[1] * apotema * 2)); 

      Polygon poly = Hex.HexagonalPolygon(20, auxX, auxY); 

      poly.Fill = Brushes.Blue; 

      Hexagon.Tile tile = new Hexagon.Casilla(); 

      tile.coords = coords; 
      tile.hex = poly; 

      ListTiles.Add(tile); 
     } 

i pokażę elementu wielokąta na Listę dachówek tak ...

foreach (Hexagon.Tile t in ListTiles) 
{ 
    PolyCanvas.Children.Add(t.hex); 
} 

a następnie znaleźć wielokąta z MouseEvent i zmienić jego właściwości:

private void PolyCanvas_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    if (e.OriginalSource is Polygon) 
    { 
     Polygon poly = e.OriginalSource as Polygon; 

     poly.Fill = Brushes.Red; 
    } 
} 

Nieco więcej o kodzie ... Xmal:

<Grid Name="MainGrid"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="400"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Canvas Name="PolyCanvas" MouseDown="PolyCanvas_MouseDown" Height="700" Width="1200"> 
    </Canvas> 
    <TextBox Name="txt" Grid.Row="1"></TextBox> 
</Grid> 

Mam dokładnie szukał odpowiedzi, ale jestem pojęcia.

+0

Chcesz sprawdzić, czy myszy wciśnięty na wieloboku lub na inny? –

+0

Na wielokącie, który nacisnąłem. – Commit

+0

Czy próbowałeś uzyskać informacje od "nadawcy"? –

Odpowiedz

1

Spróbuj

foreach (int[] i in ValidCoordinates) 
{ 
    int[] coords = i; 

    double apotema = Math.Sqrt(Math.Pow(20, 2) - Math.Pow(20/2, 2)); 

    double auxX = x + (coords[0] * (20 * 3/2)); 
    double auxY = y + (coords[0] * apotema + (coords[1] * apotema * 2)); 

    Polygon poly = Hex.HexagonalPolygon(20, auxX, auxY); 

    poly.Fill = Brushes.Blue; 

    Hexagon.Tile tile = new Hexagon.Casilla(); 

    tile.coords = coords; 
    tile.hex = poly; 
    ListTiles.Add(tile); 
} 
... 
//put values into tile and then set as tag 
PolyCanvas.Tag = tile; 
... 
private void PolyCanvas_MouseDown(object sender, MouseButtonEventArgs e) 
{  
    var canvas = sender as System.Windows.Controls.Canvas; 
    if (canvas.Name == "PolyCanvas") 
    { 
      if(canvas.Tag != null) 
      var tiles = (Tile)canvas.Tag; 
    } 
} 
+0

Myślę, że możesz mnie stracić. Mogłem już określić współrzędne X, Y wielokąta w stosunku do płótna. Współrzędne, o których mówiłem, to te w Płytkach Klasy, które są współrzędnymi sześcianu (x, y, z) i nie mają nic wspólnego ze współrzędnymi punktu. Przepraszamy za bycie niejednoznacznym, przejdź do edycji pytania, aby było jasne. I dzięki za twoją pomoc. – Commit

+0

Czego chcesz teraz? –

+0

Poprawiłem pytanie, mam nadzieję, że teraz jest mniej zagmatwane. – Commit

Powiązane problemy