创建扫雷UI控件?

时间:2009-09-18 13:41:58

标签: wpf-controls

我一直在忙着制作一个可以解决扫雷难题的程序(除了我觉得它很有趣之外别无其他原因)。但是,当涉及到UI时,我非常不喜欢实例化一百多个相同的控件,每个单元一个。我应该创建一个自定义控件来处理它的所有绘图和输入吗?你们建议采用什么方法?

我正在使用WPF,而且我很新。任何指针都会很棒。

2 个答案:

答案 0 :(得分:2)

是的,自定义控件是个好主意。此外,M-V-VM在这种情况下是必须的;它会大大降低你的应用程序的复杂性。

我会使用UniformGrid并使用Buttons作为方块。如果要添加“?”,则必须创建三态自定义按钮。中间状态。

按钮的模型看起来像

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

您在代码而不是控件中处理模型。将九个MineSquare放入绑定到UniformGrid的ViewModel上的ObservableCollection中,你就拥有一个3x3扫雷游戏。每个按钮都处理自己的逻辑。您可以通过视图模型挂钩到模型中,遍历所有方块并确定是否每个人都被点击过。

答案 1 :(得分:0)

我认为你应该创建一个所有者绘制的控件。 WPF很酷,但WPF应用程序仍然对表单上的控件总数有相同的限制,因此对Minesweeper中的每个单元格单独控制仍然会有问题。

尽管如此,扫雷仍然非常出色,我自己也喜欢它。也许你可以通过制作六角形而不是矩形的细胞,并安排地雷以便拼出脏话或其他东西来获得更多乐趣。