2011-03-21 51 views
0

好的,为了总结我在做什么,我是一个想要为Microsoft Surface开发基于回合的网格场战略游戏的大学组的一部分。我的问题不涉及基于触摸控制的任何问题,所以不要担心。这个游戏将使用WPF和.NET 3.5 Framework为Surface开发。将一个2维图像数组绑定到网格

该游戏的战斗系统将与流行游戏如火焰徽章,最终幻想战术和魔界战记2非常相似,其中所有单位将被放置在一个表示他们的位置的网格场中,并且也将用于单位移动和攻击范围。

现在,看到这个游戏将大量基于网格,我想最好的方法是使用标准的System.Windows.Controls.Grid,并根据需要定义许多行和列。 XAML代码。

实施例:

<Grid Background="{StaticResource WindowBackground}" x:Name="GridField" ShowGridLines="True" Width="1024" Height="768"> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="32"/> 
     <RowDefinition Height="32"/> 
     <RowDefinition Height="32"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="32"/> 
     <ColumnDefinition Width="32"/> 
     <ColumnDefinition Width="32"/> 
     </Grid.ColumnDefinitions> 

此代码将创建并显示与每个网格块在大小为32×32 3×3的网格。

现在,假设有一个名为Unit的完全开发的类,它将包含代表Unit的所有信息,包括名称和表示该单元的Image。为了争论,假定设备的图像是正确的大小和格式,以便在分配给网格时正确显示。

对于我团队的当前计划,我们打算用C#代​​码中的数组表示当前在该领域的所有单元。

实施例:

public Unit[,] allUnits = new Unit[3,3]; 

凡[3,3]表示的网格定义列数和行数。

现在,一般到个别项目分配到电网,你必须定义项目位置显式地说是这样的:

Grid.Row =“1” Grid.Column =“1”来源=“{ Binding Unit.Picture}“

现在我知道这是不正确的语法,但我真的不关心这种方法,我的例子至少给出了它如何处理的想法。

所以,这里是我的问题:有没有什么办法可以直接将我的2维单位阵列绑定到我定义的网格,而无需定义每个元素位置?例如:如果有一种方法可以将网格本身表示为数组,例如GridField [1,2]将表示Grid.Row =“1”Grid.Column =“2”(< - 可能是倒退),那么我所要做的就是说GridField [1,2] = Unit [1,2] .Picture或类似的东西。

我不确定有一种方法可以做到这一点,所以这就是为什么我要问有关如何做到这一点的最佳方法。

总结:我想知道如何直接将我的网格绑定到我的2维单位数组,以便网格成为我数组中单位的可见表示。我想知道如何做到这一点,而不必明确定义每个网格块的内容指向正确的数组位置。我宁愿不让每个单位定义它的位置,因为这是2维数组的目的,但是如果这是不可避免的。

我希望这个问题有一个可行的解决方案,因为如果没有下一步将涉及到我创建自己的网格,这将是一个痛苦。

对于任何拼写错误和此问题的长度,我表示歉意,但我想让自己尽可能清晰。

谢谢您的时间和建议, FrostFlame64

回答

1

您可以使用自定义附加属性来达到此目的。见here。而不是帆布使用网格,并通过您的自定义逻辑填充它的孩子。

+0

这很好。我必须通过定义自己的convert方法将我的Unit类集合转换为UIElements集合来完成测试集合的工作,但它似乎对我的测试数据正常工作。谢谢! – FrostFlame64 2011-03-28 17:19:55

0

我将网格可能转换为一个集合视图模型中的数据绑定。 Collection对象应该包含可以绑定Grid.Row和Grid.Column的索引的属性。