Добавление курсора расположения (Location Crosshair) к диаграммам Silverlight
Silverlight развивается очень быстро. Прошлая конференция увидела выпуск Silverlight 3 (Beta) а также выпуск инструментария . Все это развитие усложняет следование за новыми технологиями!
Относительно диаграмм, были введены некоторые незначительные изменения, которые могут привести также к изменению способа их реализации, что включает в себя изменения пространства имен или типа ориентации по осям диаграммы. Тем не менее, наибольшим изменением является шаблон элемента управления диаграммой. В прошлом шаблон диаграммы был структурирован посредством элемента табличной сетки (Grid) как это показано ниже:
<ControlTemplate TargetType="charting:Chart"> <Grid Name="ChartArea" Style="{TemplateBinding ChartAreaStyle}"> <!-- ##### элемент управления диаграммой добавляет определение колонок/строк и осей в данном месте#### --> <Grid Height="250" x:Name="PlotArea" Style="{TemplateBinding PlotAreaStyle}"> <!-- стандартные компоненты шаблона диаграммы --> <Grid x:Name="GridLinesContainer" /> <Grid x:Name="SeriesContainer"/> <Border BorderBrush="#FF919191" BorderThickness="1" /> <!-- ##### здесь добавляется курсор расположения и обозначения #### --> </Grid> </Grid> </ControlTemplate>
После загрузки шаблона диаграмма добавляет оси и соответствующие определения колонок / строк. Это позволяет нам спокойно добавить новое визуаальное содержимое в пределах сетки ‘PlotArea’. Визуальное дерево при помощи выглядит следующим образом:
Содержимое, которое было добавлено нами для построения указателя/курсора и обозначений, обведено красным.
Мартовский выпуск инструментария Silverlight модифицирует способ того, как оси будут добавлены к диаграмме - сделано это путем введения новой панели разметки - EdgePanel (кажется, DockPanel!). Эта панель позволяет вам располагать элементы на одном из четырех краев панели либо в ее центре. Модифицированный шаблон элемента показан ниже:
Мы указали место расположения, где было добавлено наше визуальное содержимое, а также место, где элемент управления диаграммой добавляет оси. Далее продемонстрировано результирующее визуальное дерево:
Значительным отличием в данном месте является то, что все компоненты нашей диаграммы содержатся в пределах все той же панели EdgePanel, где их расположение диктуется свойством EdgePanel.Edge. Единственная проблема заключается в том, что если раньше из-за Z-образного порядка наше содержимое было в верху, то теперь оно где-то посередине. К счастью, EdgePanel поддерживает прикрепленное свойство Canvas.ZIndex , тем самым позволяя продвигать содержимое к верху. Модифицированный шаблон будет выглядеть следующим образом:
Еще одной важной особенностью является то, что обработчики событий для MouseMove, MouseLeave и т.д. при ассоциации с табличной сеткой (Grid) будут работать, только если их свойство background не равно null, то есть не прозрачно. Неизвестно почему, но оно работает.
Последним важным изменением является метод, используемый для преобразования точек из координат экрана в позиции в пределах системы координат диаграммы. Ранее можно было использовать метод GetPlotAreaCoordinateValueRange по отношению к скрытому интерфейсу IRangeAxis. Теперь оно переименовано в GetValueAtPosition и возвращает и получает тип UnitValue в качестве входного параметра (скорее всего, для сохранения постоянства прикладного интерфейса по отношению к секторным диаграммам). А вот как выглядит код:
/// <summary> /// Преобразует полученную позицию из табличной сетки в точки в /// пределах координатной системы элемента /// </summary> private KeyValuePair<DateTime, double> GetPlotAreaCoordinates(Point position) { IComparable yAxisHit = ((IRangeAxis)YAxis).GetValueAtPosition( new UnitValue(PlotArea.ActualHeight - position.Y, Unit.Pixels));
IComparable xAxisHit = ((IRangeAxis)XAxis).GetValueAtPosition( new UnitValue(position.X, Unit.Pixels));
return new KeyValuePair<DateTime, double>((DateTime)xAxisHit, (double)yAxisHit); }
Имея данные изменения, наш курсор расположения (crosshair) будет теперь полнофункциональным:
В этой статье обсуждаются 12 вопросов, касающихся связывания, размещения, использования сервисов WCF, и как подключаться к базе данных при помощи Silverlight.
WPF и Silverlight,
Реализация шаблонов мастер страниц в Silverlight Есть несколько статей о том, как реализовать шаблон мастер страницы в Silverlight. Вопрос в том, действительно ли нам нужна возможность создавать шаблон мастер страницы в Silverlight. Если есть преимущества использования функции шаблона мастер страницы в ASP.NET, то нет причины, из-за которой Silverlight не мог бы использовать это преимущество...
WPF и Silverlight,
Элемент управления TreeView в Silverlight Элемент управления TreeView идеально подходит для отображения данных иерархической структуры. Несмотря на то, что вы можете выполнить многое при помощи данного элемента управления, в своей простейшей форме он достаточно легок в использовании, как только вы разберетесь в основной рекурсивности, требуемой им....
WPF и Silverlight,
Элемент управления HeaderContentControl в Silverlight Данная статья представляет собой обзор элемента управления HeaderContent из Silverlight Toolkit. Для того, чтобы увидеть HeaderContentControl в действии создайте новое приложение Silverlight, а также новую ссылку на Microsoft.Windows.Controls.dll из toolkit....