С чего начать разработку пользовательского элемента управления, содержащего дочерние объекты? - PullRequest
2 голосов
/ 08 сентября 2008

Я думаю, что это забавный вопрос инженерного уровня.

Мне нужно спроектировать элемент управления, который отображает линейный график. То, что я хочу сделать, это использовать конструктор для добавления нескольких Pens, которые фактически описывают данные и представление, так что в итоге получается что-то вроде Xaml:

<Chart>
  <Pen Name="SalesData" Color="Green" Data="..."/>
  <Pen Name="CostData" Color="Red" Data="..." />
  ...
</chart>

Моя первая мысль - расширить ItemsControl для класса Chart. Приведет ли это меня туда, куда я хочу пойти, или я должен смотреть на это с другой стороны, например, расширение Panel?

Главное требование - иметь возможность использовать его в конструкторе без добавления кода на C #. Для того, чтобы это было возможно, ему необходимо сохранить свою структуру в древовидной модели. Другими словами, если бы я работал с этим в Expression Blend или Mobiform Aurora, я мог бы выбрать диаграмму из логического дерева или выбрать любую из отдельных ручек для редактирования их свойств.

Ответы [ 3 ]

2 голосов
/ 15 сентября 2008

Я бы использовал Chart в качестве ItemsControl, а его ItemsPanel - это Canvas (Для легкого использования я бы использовал Grid в качестве ItemsPanel). И каждое перо будет CustomControl, производным от класса PolyLine. Это имеет какой-то смысл?

1 голос
/ 02 декабря 2008

Для тех, кто заинтересован в создании собственного контроля с точки зрения личного развития (как указано в исходном вопросе), я бы предложил структуру в этом формате.

<Chart>
  <Chart.Pens>
    <Pen Name="SalesData" Data="{Binding Name=SalesData}" />        
    <Pen Name="CostData">
      <Pen.Data>
        <PenData Y="12" X="Jan" />
        <PenData Y="34" X="Feb" />
      </Pen.Data>
    </Pen>
  </Chart.Pens>
</Chart>

Для этого вам нужно будет представить коллекцию Pens в пользовательском элементе управления (я бы не увидел это как производный элемент управления ItemsControl). Этот производный пользовательский элемент управления будет инкапсулировать другие элементы управления, обычно сетку для размещения метки для заголовка, меток для имен осей, возможно Canvas для области рисования и ItemsControl для отображения элементов в легенде.


Для тех, кто ищет готовое решение

Для тех, кто ищет готовое решение, я бы проверил CodePlex для VisiFire WPF Chart. Он совместим с WPF и Silverlight и даже имеет приложение Silverlight , позволяющее вам вводить данные и стиль и генерировать XAML (или HTML) для вставки в ваше приложение.

0 голосов
/ 09 сентября 2008

Другой вариант - расширить Canvas для диаграммы и расширить Shape для ручек. Затем динамически нарисуйте фигуру на основе свойств Цвет / Данные.

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