XAML游戏的最佳方法

时间:2011-09-05 18:04:06

标签: wpf silverlight xaml windows-phone-7

我正在开发一个带网格的棋盘游戏。每个网格都为最终用户提供了一些选项。我们的想法是,当用户单击网格单元格时,选项菜单将显示在网格下方。我的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>

Board是一个网格,每个单元格中包含一个方形对象。每个方形对象都有MouseLeftButtonDown监听器。单击方形对象时,必须打开选择器菜单,并且必须将一些参数传递给此对象。

选择器是另一个类的成员时,最好的方法是什么?我是否需要将选择器对象(在MainPage.xaml中)传递给板和方形对象?或者有没有办法将事件传播给选择器?

干杯 汤姆

1 个答案:

答案 0 :(得分:1)

我会做三件事:

  • 首先,让每个棋盘都提升相同的自定义RoutedEvent (称为“选择”,已在基础上定义 “Tile”)。
  • 其次,让董事会听取Tile.Chosen活动。一旦 董事会看到事件,让它设置一个新的属性 “ChosenTile”/“ChosenTileInfo”/或者你需要的任何东西。
  • 最后,在Chooser控件上创建一个DependencyObject(它会是 称为“目标”之类的东西,以便你可以绑定它 ChosenTile。

上面的代码最终会看起来像:

<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>

另一个选择是仍然执行第一部分,但不是创建DependencyObject,而是提升自己的事件并在代码隐藏中执行其他所有操作。