WPF“十六进制网格”组件

Kev*_*ose 3 wpf custom-controls hexagonal-tiles

进入WPF自定义控件的世界,想知道设计HexGrid控件的最佳方法是什么?想一想您最喜欢的桌面战争游戏;或者,同样可能是您最喜欢的视频游戏,它从台式战争游戏的悠久历史中窃取了设计。

基础模型公开了一种重要的方法,作为Map类的一部分:

Hex GetHex(int x, int y, int z)*;
Run Code Online (Sandbox Code Playgroud)

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

可能相关的限制:
地图的大小不会更改,并且十六进制数据会在非常可预测的时间发生更改(始终直接响应用户操作)。

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

我正在寻找的是构建此应用所需的草图,而不是现成的组件。

*我虽然对这个寻址方案非常聪明,但是显然我来晚了

ASh*_*ASh 5

我认为在WPF中将HexGrid设计为a Panel而不是设计为UserControl 更为合理。面板没有可视化表示,仅需要适当地排列子元素(如果使用HexGrid,则为蜂窝模式)。这些子元素又应具有六边形形状。

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

CodeProject文章

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>
Run Code Online (Sandbox Code Playgroud)

十六进制颜色选择器

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