2011-03-21 39 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的索引的屬性。