2011-09-05 5 views
1

Je développe un jeu de plateau avec une grille. Chaque grille a quelques options pour l'utilisateur final. L'idée est qu'un menu d'options sera affiché sous la grille lorsque l'utilisateur clique sur une cellule de la grille. Mon XAML ressemble:Meilleure approche pour le jeu XAML

MainPage.xaml:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="450"/> 
     <RowDefinition Height="50"/> 
    </Grid.RowDefinitions> 
    <game:Board Grid.Row="0"/> 
    <game:Chooser Grid.Row="1" d:IsHidden="False"/> 
</Grid> 

Le Conseil est une grille qui contient un objet carré dans chaque cellule. Chaque objet carré possède un écouteur MouseLeftButtonDown. Lorsque vous cliquez sur l'objet carré, le menu du sélecteur doit s'ouvrir et certains paramètres doivent être transmis à cet objet.

Quelle serait la meilleure approche pour faire cela puisque le sélecteur est membre d'une autre classe? Dois-je passer l'objet chooser (qui est dans MainPage.xaml) à la carte et à l'objet carré? Ou y a-t-il un moyen de propager l'événement au sélecteur?

Vive Tom

Répondre

1

je ferais trois choses:

  • d'abord, ont chaque carreau du forum soulèvent la même coutume RoutedEvent (appelé quelque chose comme « choisi, qui a été défini sur une base classe « tuile »).
  • Deuxièmement, avoir écouter le conseil pour l'événement Tile.Chosen. une fois que le conseil d'administration voit l'événement, l'ont mis une nouvelle propriété « ChosenTile »/« ChosenTileInfo »/ou tout ce dont vous avez besoin.
  • Enfin, créez un DependencyObject sur le contrôle Chooser (ce serait appelé quelque chose comme "Cible"), de sorte que vous puissiez le lier à ChosenTile.

Le code ci-dessus serait finir par quelque chose comme:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="450"/> 
     <RowDefinition Height="50"/> 
    </Grid.RowDefinitions> 
    <game:Board Grid.Row="0" x:Name="MyBoard"/> 
    <game:Chooser Grid.Row="1" Target="{Binding ChosenTile, ElementName=MyBoard}"/> 
</Grid> 

L'autre option est de faire encore la première partie, mais au lieu de créer un DependencyObject, il suffit d'augmenter votre propre événement et faire tout le reste en code-behind.

Questions connexes