2011-09-05 73 views
1

我正在開發一個帶有網格的棋盤遊戲。每個網格都有一些用於最終用戶的選項。這個想法是,當用戶點擊一個網格單元格時,網格下將顯示一個選項菜單。我的XAML的樣子: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> 

董事會是包含在每一個小區的方形對象的網格。每個方形對象都有MouseLeftButtonDown偵聽器。單擊方形對象時,必須打開選擇器菜單,並且必須將一些參數傳遞給此對象。

這樣做的最好方法是什麼,因爲選擇器是另一個類的成員?我是否需要將選擇器對象(位於MainPage.xaml中)傳遞給板和方形對象?或者有沒有辦法將事件傳播給選擇器?

乾杯 湯姆

回答

1

我會做三兩件事:

  • 首先,必須每塊木板瓦都提出同樣的自定義RoutedEvent (被稱爲像「被選中,已經在底座上定義 class「Tile」)。
  • 其次,讓主板監聽Tile.Chosen事件。一旦 主板看到該事件,是否設置了一個新屬性 「ChosenTile」/「ChosenTileInfo」 /或任何你需要的。
  • 最後,在Chooser控件上創建一個DependencyObject(它將會是 ,名稱與「Target」類似),以便您可以將它綁定到 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的,只是提出自己的活動,在代碼隱藏方面做其他事情。