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中声明。
我正在寻找的是构建此应用所需的草图,而不是现成的组件。
*我虽然对这个寻址方案非常聪明,但是显然我来晚了。
我认为在WPF中将HexGrid设计为a Panel而不是设计为UserControl 更为合理。面板没有可视化表示,仅需要适当地排列子元素(如果使用HexGrid,则为蜂窝模式)。这些子元素又应具有六边形形状。
概念验证:我的HexGrid项目(太大,无法在此处发布)
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)
我知道这个问题很老套,但是为了以防万一,请分享我的解决方案
| 归档时间: |
|
| 查看次数: |
2877 次 |
| 最近记录: |