2009-06-18 172 views
3

跳入WPF自定義控件的世界,並想知道設計HexGrid控件的最佳方式是什麼?想想你最喜歡的桌面戰爭遊戲;或者也可能是您最喜歡的視頻遊戲,它從臺式戰爭遊戲的驕傲歷史中竊取設計。WPF「hex grid」組件

底層模型公開一個顯著方法,作爲一個地圖類的一部分:

Hex GetHex(int x, int y, int z)*; 

六角包含所有相關數據(在此刻,一個地形枚舉1映射:1至背景色;從小...開始)。

可能相關的約束條件:
地圖不改變大小在非常預測的時間&十六進制數據的變化(始終以用戶的行動直接回應)。

理想情況下,組件將會展開以便乾淨地填充其容器,並且可以直接在XAML中聲明。

我正在尋找的是我需要做什麼來構建這個概略的輪廓,而不是現成的組件。

*我雖然對這個尋址方案很聰明,但顯然我是late to the party

回答

1

編輯:這裏有一個鏈接到皮特的項目頁面有一個十六進制網格示例。 http://blois.us/Projects.html 有一個尋路示例顯示了一個名爲pathfinding的項目,該項目有一個Hex網格,並且可能使用與掃雷人員相同的基本代碼。我還沒有看過它。它是Silverlight 3,因此可能需要升級。掃雷艇非常優雅。

拉爾夫

ORIGINAL: 有通過的掃雷的六邊形版本彼得布盧瓦爲Silverlight 2的樣品。

它包括源代碼。他有一個非常優雅的方法,通過覆蓋measureoverride並在網格上進行排列。 Mouseovers等工作得很好。代碼非常少。

我不能在網上找到任何更多的項目,儘管谷歌已經過時的鏈接到它通過搜索六角掃雷艇Silverlight的源代碼布盧瓦

彼得布盧瓦具有以下地址當前的博客,所以你可以嘗試在這裏與他聯繫... http://blois.us/Projects.html

祝你好運,告訴我它是怎麼回事,我要去東東類似。

+1

不幸的是,這些鏈接正在用`404`做出響應。這個答案現在基本沒用。 – IAbstract 2015-09-12 13:58:14

0

在我看來,WPF將HexGrid設計爲Panel而不是UserControl更合理。面板沒有可視化表示,只需要正確安排子元素(HexGrid的情況下 - 以蜂窩模式)。那些孩子元素反過來應該是六角形的。

一個概念證明:我HexGrid項目(太大,張貼在這裏)

CodeProject article

GitHub repository

HexList:選擇ItemsControl中,其顯示HexGrid面板上HexItem容器項目

HexGrid:排列子元素的面板蜂巢狀

HexItem:六邊形ContentControl中聲明使用的

例如:

<hx:HexList Name="HexColors" Orientation="Vertical" 
      Grid.Row="1" 
      Padding="10" 
      SelectedIndex="0" 
      Background="{Binding Path=SelectedItem.Background, RelativeSource={RelativeSource Self}}" 
      RowCount="5" ColumnCount="5"> 
    <hx:HexItem Grid.Row="0" Grid.Column="1" Background="#006699"/> 
    <hx:HexItem Grid.Row="0" Grid.Column="2" Background="#0033CC"/> 
    <hx:HexItem Grid.Row="0" Grid.Column="3" Background="#3333FF"/> 
    <!--...--> 
    <hx:HexItem Grid.Row="4" Grid.Column="1" Background="#CC9900"/> 
    <hx:HexItem Grid.Row="4" Grid.Column="2" Background="#FF3300"/> 
    <hx:HexItem Grid.Row="4" Grid.Column="3" Background="#CC0000"/> 
</hx:HexList> 

hex color selector

據我所知,這個問題是一個過時的歌曲,只是分享我的解決辦法在