13

我必须像这样做一个“网格”:

谐波表 谐波表

我正在尝试创建一个列表ListViewItemsSource="List<Note>"每个奇怪的音符都移动到底部的位置...

ListView正确的控制吗?

如何绘制一个靠近下一个对象的面的精确六边形?

编辑:六边形绘图已解决......这是xaml:

<Path d:LayoutOverrides="None" 
      d:LastTangent="0,0" Stroke="Blue" Fill="Red" 
      HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
      Margin="0" Width="100" Height="100" x:Name="Path" 
  Stretch="Fill" 
      Data="M8.660254,0 L17.320508,5 17.320508,15 8.660254,20 0,15 0,5 8.660254,0 z"/>
4

2 回答 2

7

如果您需要选择项目,笔记的容器将是 anItemsControl或 a 。ListBox然后你给你的项目一个模板,使用ListBox.ItemTemplate你的六边形图。你有一个很好的自定义列表框布局教程。

此时,您的六边形显示在另一个下方,就像 ListBox 默认情况下所做的那样。要获得您的特殊布局,您必须更改ListBox.ItemPanel. 在这里,您有两种可能性:

  • 要么你使用Canvas支持绝对定位的面板。在这种情况下,您的项目必须具有用于定位它们的 X 和 Y 属性。
  • 或者您创建一个自定义的Panel,可能基于Canvas,它能够将您的自定义坐标系(例如音符名称+八度数)转换为 X 和 Y。有点困难但更可重用。CodeProject 上的自定义面板示例。
于 2010-12-06T08:35:29.397 回答
2

HexGrid:CodeProject 文章

HexGrid:GitHub 存储库

可能解决方案的关键组件是可以排列六边形元素的 WPF 面板(标准面板使用矩形子元素进行操作)。看看我的 HexGrid 项目(太大,无法在此处发布)。它的中心部分是一个HexGrid(WPF Panel,它以蜂窝模式排列子元素)。子元素由HexItems(六边形 ContentControls)表示。还有HexList(选择器 ItemsControl,它在 HexGrid 面板上显示 HexItem 容器中的项目)提供开箱即用的十六进制选择支持。

用法示例:

<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:18:05.233 回答