Да, пользовательский элемент управления будет хорошей идеей. Кроме того, M-V-VM является обязательным в такой ситуации; это значительно снизит сложность вашего приложения.
Я бы взял UniformGrid и использовал кнопки в качестве квадратов. Вам нужно создать пользовательскую кнопку с тремя состояниями, если вы хотите добавить «?» промежуточное состояние.
Модель для кнопки будет выглядеть как
public class MineSquare : INotifyPropertyChanged
{
// exploded, number, or nothing
pubic ImageSource ButtonImage {get;private set;}
// true, then goes to false when clicked
public bool CanClick {get; private set;}
// bound to the Command of the button
public ICommand Click {get; private set;}
}
Вы имеете дело с моделью в коде, а не с элементами управления. Вставьте девять MineSquares в ObservableCollection на вашей ViewModel, привязанной к UniformGrid, и вы получите игру тральщика 3х3. Каждая кнопка обрабатывает свою логику. Вы можете подключиться к моделям через модель представления, чтобы перебрать все квадраты и определить, все ли нажали.