Создать целочисленное свойство, которое называется MyCount
. Создать целочисленные константы OriginalWidth и OriginalHeight. Создать целочисленные переменные ScaledWidth и ScaledHeight.
Когда ваш набор создан, добавьте mySet.Name.Count()
в MyCount
.
При добавлении объекта добавьте myObject.SomeProperty.ToString().Count()
в MyCount
.
При удалении объекта вычтите myObject.SomeProperty.ToString().Count()
от MyCount
.
Когда MyCount изменяется, пересчитывать ScaledWidth
и ScaledHeight
- что-то вроде ScaledWidth = OriginalWidth * (MyCount * [insert number here])
Для того, чтобы сохранить ваш эллипс в правильной перспективе ваша высота эллипса и ширина будет основываться на постоянных значений, умноженных на коэффициент масштабирования, который MyCount
. Вам нужно 4 целочисленных значения: OriginalWidth
, OriginalHeight
, ScaledWidth
и ScaledHeight
. OriginalWidth
и OriginalHeight
- это целые константы, определяющие минимальную ширину и высоту вашего эллипса. ScaledWidth
и ScaledHeight
- это целые переменные, к которым привязаны свойства Height и Width Ellipse.
Каждый раз, когда новый объект добавляется или удаляется в/из вашего набора, количество символов в его SomeProperty
добавляется к MyCount
. Каждый раз, когда MyCount
изменяет, он вызывает пересчет ScaledWidth
и ScaledHeight
. Связывание свойств ширины и высоты Ellipse с ScaledWidth
и ScaledHeight
и реализация INotifyPropertyChanged по этим свойствам должны соответствующим образом масштабировать ваш эллипс.
UPDATE
Алгоритм размещен здесь: http://programming.nullanswer.com/forum/11925, казалось бы решить размещение ваших дочерних элементов в пределах вашего родительского эллипса.Я заменил эллипс для квадрата/круга, где это необходимо:
Выберите случайную точку внутри [родительского эллипса] & экземпляр [очень низкая ширина/высота эллипса] в этой точке. Grow радиус этого эллипса [], пока она не удовлетворяет этим критериям:
- не перекрывает любой из других выбрали [эллипсы].
- не распространяется за пределы [родительский эллипс].
Выберите [эллипс], если он удовлетворяет этим критериям.
Чтобы мы все думали в одном направлении, можете ли вы опубликовать несколько подробностей о вашей текущей реализации? Вы работаете с шаблоном view/codebehind? MVVM? Любые рамки (MVVM Light/Caliburn/etc.)? – goobering
Я работаю со слегка принятым MVP. С его wpf он также является xaml с кодом. Никаких других фреймворков, кроме .NET. Но я не вижу, что вам нужна эта информация для?!? –
Реализация этой проблемы MVVM существенно отличается от реализации view/codebehind. Вы получите очень разные решения для кода, размещенные для каждого. Можете ли вы опубликовать образец того, как вы добавляете и удаляете объекты в эллипс? – goobering