3

进入 WPF 自定义控件的世界,想知道设计 HexGrid 控件的最佳方法是什么?想想你最喜欢的桌面战争游戏;或者,同样有可能,您最喜欢的电子游戏从令人自豪的桌面战争游戏历史中窃取设计。

底层模型公开了一个重要的方法,作为 Map 类的一部分:

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

十六进制包含所有相关数据(目前,将 1:1 映射到背景颜色的地形枚举;从小开始......)。

可能相关的约束:
地图的大小不变,十六进制数据在非常可预测的时间发生变化(总是直接响应用户操作)。

理想情况下,组件将扩展以干净地填充其容器,并且可以直接在 XAML 中声明。

我正在寻找的是我需要做些什么来构建它的粗略轮廓,而不是一个现成的组件。

*虽然我对这个寻址方案很聪明,但显然我迟到了

4

2 回答 2

6

在我看来,在 WPF 中,将 HexGrid 设计为 aPanel而不是 UserControl 更为合理。面板没有视觉表示,只需要正确排列子元素(在 HexGrid 的情况下 - 以蜂窝模式)。这些子元素又应该具有六角形。

概念证明:我的 HexGrid 项目(太大,无法在此处发布)

代码项目文章

GitHub存储库

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>

十六进制颜色选择器

我知道这个问题是老问题,但请分享我的解决方案以防万一

于 2017-07-21T21:12:16.320 回答
1

编辑:这是一个链接到皮特的项目页面,其中有一个十六进制网格示例。 http://blois.us/Projects.html 有一个寻路示例显示了一个名为寻路的项目,它有一个十六进制网格,并且可能使用与扫雷相同的基本代码。我还没看过。它是 Silverlight 3,因此可能需要升级。扫雷非常优雅。

拉尔夫

原文:有一个由 peter blois 制作的 silverlight 2 的六边形扫雷艇样本。

它包括源代码。他有一个非常优雅的方法,通过覆盖网格上的measureoverride和arrangeoverride。鼠标悬停等工作正常。代码非常少。

我在网上找不到这个项目了,尽管谷歌通过搜索六角扫雷机 silverlight 源代码 blois 找到了一个过时的链接

Peter Blois 在以下地址有一个当前博客,因此您可以尝试在此处与他联系... http://blois.us/Projects.html

祝你好运,告诉我情况如何,我会做类似的事情。

于 2009-10-12T01:21:45.403 回答