数据将二维图像数组绑定到网格

时间:2011-03-21 15:47:54

标签: wpf image data-binding multidimensional-array grid

好的,总结一下我在做什么,我是一个大学集团的一员,他想为微软Surface开发一个回合制,网格场,战斗游戏。我的问题不涉及基于触摸的控制的任何问题,所以不要担心。这个游戏将使用WPF和.NET 3.5 Framework为Surface开发。

游戏的战斗系统将非常类似于Fire Emblem,Final Fantasy Tactics和Disgaea 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>

此代码将创建并显示3x3网格,每个网格块的大小为32x32。

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

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

示例:

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

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

现在,通常要将单个项目分配给网格,您必须明确地定义项目位置,如下所示:

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

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

所以这是我的问题:有没有办法直接将我的2维单位阵列数据绑定到我的定义网格而不定义每个元素位置?例如:如果有一种方法将网格本身表示为数组,例如GridField [1,2]将表示Grid.Row =“1”Grid.Column =“2”(&lt; -That可能是向后) ,那么我所要做的就是说GridField [1,2] = Unit [1,2]。图片或类似的内容。

我不确定是否有办法做到这一点,所以这就是为什么我要问最好的方法。

总结:我想知道如何将我的网格直接绑定到我的2维单元阵列,以便网格成为我阵列中单位的可见代表。我想知道如何做到这一点,而不必明确定义每个Grid Block的内容以指向正确的数组位置。我不希望每个单位都定义它的位置,因为这是2维数组的目的,但是如果它是不可避免的那么就是它。

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

我为任何拼写错误和问题的长度道歉,但我想让自己尽可能清楚。

感谢您的时间和建议, FrostFlame64

2 个答案:

答案 0 :(得分:1)

您可以使用自定义附加属性来实现此目的。见here。而不是Canvas使用Grid并通过自定义逻辑填充其子项。

答案 1 :(得分:0)

我可能会将Grid转换为ViewModel for DataBinding中的集合。 Collection对象应包含Indexes的属性,您可以将Grid.Row和Grid.Column绑定到。