2015-08-14 13 views
5

Ho una classe con 3 membri, solo due di essi sono pertinenti; uno è un poligono e l'altro un int [] di coordinate. Voglio essere consapevole delle coordinate corrispondenti del poligono, ma sono davvero bloccato qui.Ottieni la classe padre del membro in MouseEvent

Conoscendo le coordinate del poligono intendo le coordinate cubiche astratte che memorizzo nella classe lungo quel poligono e che uso per dichiarare i suoi punti.

Le coordinate sono X, Y e Z e le memorizzo in un int [3] nella seguente classe. E quello che voglio fare è quello di essere in grado di catturare quelle coordinate cubi ogni volta l'evento viene attivato .:

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

Il metodo della lista di riempimento:

 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); 
     } 

E mi mostra il membro Poligono sulla lista di piastrelle come questo ...

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

e poi trovare il poligono con un MouseEvent e cambiare le sue proprietà:

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

     poly.Fill = Brushes.Red; 
    } 
} 

Un po 'più di codice ... 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> 

ho accuratamente cercato una risposta, ma io sono all'oscuro.

+0

Vuoi verificare se il mouse premuto sul poligono o su altri? –

+0

Sul poligono, quello che ho premuto. – Commit

+0

Hai provato a ottenere informazioni da 'mittente'? –

risposta

1

Prova questa

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

Penso che tu possa dimenticarmi di me. Ho già potuto dire le coordinate X, Y del poligono in relazione alla tela. Le coordinate di cui stavo parlando sono quelle delle Class Tiles, che sono coordinate del cubo (x, y, z) e non hanno nulla a che fare con le coordinate del Punto. Ci scusiamo per essere ambigui, per modificare la domanda ora per chiarire. E grazie per il tuo aiuto comunque. – Commit

+0

Cosa vuoi ora? –

+0

Ho corretto la domanda, spero che ora sia meno complicato. – Commit

Problemi correlati