我想挑选你的集体大脑如果我可以,关于一些设计问题。 我正在制作英国IECC铁路信号箱的SIM卡,为了好玩:D
这是一个真实的例子: http://photos.signallingnotices.org.uk/photo.php?pc=77&p=IMG_7319.JPG 这是80年代的技术,具有简单的图形。
它本质上是一个固定大小的单元格网格,使用自定义位图字体。
我的版本将使用WPF,以允许更多的灵活性,但仍然具有相同的基本外观,除了原始分页在一系列监视器上,我将是一个大的可滚动\ zoomable网格。我也希望网格有点无限,(至少在编辑器中,sim部分不需要它)根据需要添加行\列。
我的第一次尝试使用了网格和矩形,只是为了让我一开始很容易。 矩形可能会更改为更低级别,具体取决于它的执行情况。
我遇到了一些问题,这些问题让我觉得我可以使用比Grid更好的东西。
在“编辑器”模式下,我应该可以使用上下文菜单或在网格上选择一个空单元格来添加新元素。 用于查找选择哪个单元的所有解决方案似乎都涉及向每个单元添加透明矩形,或涉及命中测试的黑客,以及遍历每个单元以检查交叉点。
因为我将处理潜在的几千个细胞,这些都不是解决方案 似乎真的很合适,让我想知道标准网格是否是最好的继续方式。
我也希望能够拖放元素组......
网格没有“单元格”的概念。如果该行\列中有内容,我只能获取行\列。
每个单元格中只有一个视觉效果。
那么,有没有比标准网格更好的方法呢?创建自定义面板,扩展现有面板或者是否存在可能有用的现有免费第三方控件会更好吗?我的大脑似乎无法想象除了Grid之外的任何其他东西:D
答案 0 :(得分:1)
我不知道第三方面板,但我认为网格是你最好的选择。
这就是我要做的事情:
VirtualizingPanel.IsVirtualizing = true
和VirtualizingPanel.VirtualizationMode = VirtualizationModes.Recycling
,以便减轻应用的布局。和Voilà!我不认为你需要的不仅仅是这个,而且我很确定如果不使用你提到的“黑客”,你不能做到这一点(尽管在这种情况下我不会称它们为“黑客”)
注意:这假设您的网格将滚动(因为我认为“1000s”的单元格将不适合您的屏幕)。如果您打算在屏幕上完全显示您的网格,虚拟化基本上是无用的,您将不得不使用您详细说明的方法之一