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

StackOverflow https://stackoverflow.com/questions/49562

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

<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).Этот производный пользовательский элемент управления будет инкапсулировать другие элементы управления, обычно сетку для размещения метки заголовка, метки для названий осей, возможно, холст для области рисования и ItemsControl для отображения элементов в легенде.


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

Для тех, кто ищет готовое к работе решение, я бы проверил CodePlex на ВизиФайр Управление диаграммой WPF.Он совместим с WPF и Silverlight и даже имеет Приложение Silverlight чтобы вы ввели свои данные и стиль и сгенерировали XAML (или HTML) для вставки в ваше приложение.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top