Лучший подход к игре XAML - PullRequest
       9

Лучший подход к игре XAML

1 голос
/ 05 сентября 2011

Я занимаюсь разработкой настольной игры с сеткой.Каждая сетка имеет несколько вариантов для конечного пользователя.Идея состоит в том, что меню параметров будет отображаться под сеткой, когда пользователь щелкает ячейку сетки.Мой 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) на плате и квадратный объект?Или есть способ донести событие до выбора?

Cheers Tom

1 Ответ

1 голос
/ 07 сентября 2011

Я бы сделал три вещи:

  • Во-первых, пусть каждый тайл доски поднимает один и тот же пользовательский RoutedEvent (называется что-то вроде "Избранный, который был определен на основе класс "Плитка").
  • Во-вторых, попросите Правление прослушать событие Tile.Chosen. Однажды Правление видит событие, установило ли оно новое свойство "ChosenTile" / "ChosenTileInfo" / или все, что вам нужно.
  • Наконец, создайте объект DependencyObject в элементе управления Chooser (это будет называется что-то вроде «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, просто создайте собственное событие и сделайте все остальное в коде позади.

...