Creating grid of hexagons

后端 未结 2 1126
执笔经年
执笔经年 2021-02-13 14:45

I have to do a \"grid\" like this:

\"Harmonic Harmonic table

I\'m trying to create a ListView

相关标签:
2条回答
  • 2021-02-13 15:13

    The container for your notes would be an ItemsControl or a ListBox if you need to select items. Then you give your items a template using ListBox.ItemTemplate where you include your hexagon drawing. You have a nice tutorial on Custom ListBox layout.

    At this point, your hexagons are displayed one below the other as a ListBox does by default. To get your special layout, you have to change the ListBox.ItemPanel. Here you have two possibilities:

    • either you use the Canvas panel that supports absolute positioning. In this case your items must have X and Y properties that you will use to position them.
    • or you create a custom Panel, probably based on Canvas, that is able to convert your custom coordinate system (for example note name + octave number) into X and Y. A bit more difficult but much more reusable. An example of Custom Panel on CodeProject.
    0 讨论(0)
  • 2021-02-13 15:25

    HexGrid: CodeProject article

    HexGrid: GitHub repository

    The key component of a possible solution is a WPF Panel which can arrange hexagonal elements (Standard Panels operate with rectangular child elements). Take a look my HexGrid project (too large to post here). The cental part of it is a HexGrid (WPF Panel which arranges child elements in a honeycomb pattern). Child elements are represented by HexItems (hexagon-shaped ContentControls). There is also HexList (selector ItemsControl which displays items in HexItem container on a HexGrid panel) which gives hex selection support out-of-box.

    example of usage:

    <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>
    

    0 讨论(0)
提交回复
热议问题