WPF "шестигранная сетка" компонент - PullRequest
3 голосов
/ 18 июня 2009

Окунитесь в мир пользовательских элементов управления WPF, и вам стало интересно, каким будет лучший способ разработки элемента управления HexGrid? Вспомните свою любимую настольную военную игру; или, что не менее вероятно, ваша любимая видеоигра, которая крадет дизайн из гордой истории настольных военных игр.

Базовая модель предоставляет один значимый метод как часть класса Map:

Hex GetHex(int x, int y, int z)*;

Hex содержит все соответствующие данные (на данный момент перечисление Terrain, которое отображает 1: 1 в цвет фона; начинается с малого ...).

Возможно соответствующие ограничения:
Карта не изменяется по размеру, а данные Hex изменяются в очень предсказуемое время (всегда в прямой реакции на действия пользователя).

В идеале компонент должен расширяться, чтобы полностью заполнить свой контейнер, и быть декларируемым непосредственно в XAML.

То, что я ищу, - это схематичный план того, что мне нужно сделать, чтобы создать это, а не готовый компонент.

* Я хотя и был довольно умен с этой схемой адресации, но, видимо, я опоздал на вечеринку .

Ответы [ 2 ]

3 голосов
/ 22 июля 2017

По моему мнению, в WPF более разумно проектировать HexGrid как Panel, а не как UserControl. Панели не имеют визуального представления и должны только правильно расположить дочерние элементы (в случае HexGrid - в виде сот). Эти дочерние элементы, в свою очередь, должны иметь шестиугольную форму.

Подтверждение концепции: мой проект HexGrid (слишком большой для размещения здесь)

Артикул CodeProject

GitHub репозиторий

HexList : селектор ItemsControl, который отображает элементы в контейнере HexItem на панели HexGrid

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>

hex color selector

Я понимаю, что вопрос старый, но поделитесь своим решением на всякий случай

1 голос
/ 12 октября 2009

РЕДАКТИРОВАТЬ: Вот ссылка на страницу проекта Пита, которая имеет образец шестнадцатеричной сетки. http://blois.us/Projects.html Существует пример поиска пути, который показывает проект под названием pathfinding, который имеет Hex Grid и, вероятно, использует тот же базовый код, что и тральщик. Я еще не смотрел на это. Это Silverlight 3, поэтому, возможно, потребуется обновить. Сапер был довольно элегантным.

Ralph

ОРИГИНАЛ: Был образец для серебряного света 2 Питером Блуа шестиугольной версии тральщика.

Включен исходный код. У него был очень изящный способ сделать это, переопределив измерение переопределения и упорядочение по сетке. Мышки и т. Д. Работали нормально. Там было замечательно мало кода.

Я больше не могу найти проект в Интернете, хотя Google имеет устаревшую ссылку на него, выполнив поиск по исходному коду шестиугольника тральщика silverlight blois

У Питера Блуа есть текущий блог по указанному ниже адресу, поэтому вы можете попробовать связаться с ним здесь ... http://blois.us/Projects.html

Удачи и скажите мне, как это происходит, я собираюсь быть чем-то похожим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...