Я должен создать управление WPF, которое выглядит так или иначе подобным этому: сопроводительный текст http://img251.imageshack.us/img251/6857/circle.png
Где каждый цвет должен быть активируемым по щелчку и изменяемого размера (или можно выбрать).
Это управление будет использоваться для установки режимов на часах дня. Я думал о создании 24 кнопок, которые были бы расположены в кругу:
сопроводительный текст http://img684.imageshack.us/img684/2184/buttonsk.png
Другая идея состояла в том, чтобы нарисовать полный круг и вычислить пользовательское положение щелчка мышью для выбора и нарисовать несколько кругов для представления данных.
Какие-либо другие/лучше идеи о том, как создать это? (извините мой плохой рисунок).
Похоже, вам нужен настраиваемый ListBox (несколько элементов, которые можно выбрать / щелкнуть). Для макета вы можете использовать какой-либо тип RadialPanel в качестве ItemsPanel. Вероятно, вам также нужно изменить ItemContainerStyle, чтобы ваши ListBoxItems выглядели так, как у вас выше, возможно, с некоторыми триггерами для изменения цвета в зависимости от состояния выбора. В зависимости от того, какое поведение вам нужно от ваших элементов, вам может потребоваться создать настраиваемые элементы управления, производные от ListBox / ListBoxItem, но во многих случаях встроенное поведение поможет вам. Чтобы повторно использовать его как единый блок, вы можете заключить ListBox с его 24-часовыми элементами и настраиваемыми шаблонами в UserControl и предоставить данные выбора в любой форме, которая вам нужна, как свойство зависимости (например, IEnumerable элементов данных, представляющих выбранные часы. ).
Это поможет вам начать работу?
Я думаю, что вы получите странные краевые эффекты с несколькими перекрывающимися или касающимися элементами управления. Поэтому я бы сделал один пользовательский элемент управления для этого. Он будет преобразовывать положение мыши при нажатии кнопки вниз в срез, а затем выполнять соответствующие действия.
С помощью одного элемента управления можно также придумать рациональный способ работы с клавиатурным вводом, а также показать выбор и обеспечить возможность многократного выбора.