Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Отсутствие свойства No PathSegment.IsStroked

Читайте также:
  1. II. Свойства и особенности невидимых тел человека.
  2. А. ХАРАКТЕРНЫЕ СВОЙСТВА КАЖДОГО ОРГАНА
  3. Автономные и неавтономные динамические системы. Свойства решений автономных динамических систем (АДС). Фазовый портрет и бифуркации.
  4. Базисные свойства
  5. Билет 23. Магнитные свойства ферромагнетиков.
  6. Блок Отсутствие товара
  7. В случае если, в отсутствие вины Арендодателя, Арендатор не предоставит какие-либо документы, необходимые для государственной регистрации настоящего Договора.

IsStroked позволяет указать, что данный сегмент последовательности линий не должен отображаться. Так, в WPF можно задать следующую последовательность:

Рисунок 10.7. Простая последовательность линий

при помощи данной XAML разметки:

1: <Path Stroke="Black" StrokeThickness="3"> 2: <Path.Data> 3: <PathGeometry> 4: <PathFigure StartPoint="0,20"> 5: <LineSegment Point="20,0" /> 6: <LineSegment Point="40,20" /> 7: <LineSegment Point="60,20" IsStroked="False" /> 8: <LineSegment Point="80,0" /> 9: <LineSegment Point="100,20" /> 10: </PathFigure> 11: </PathGeometry> 12: </Path.Data> 13: </Path>

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

1: <Path Stroke="Black" StrokeThickness="3"> 2: <Path.Data> 3: <PathGeometry> 4: <PathFigure StartPoint="0,20"> 5: <LineSegment Point="20,0" /> 6: <LineSegment Point="40,20" /> 7: </PathFigure> 8: <PathFigure StartPoint="60,20"> 9: <LineSegment Point="80,0" /> 10: <LineSegment Point="100,20" /> 11: </PathFigure> 12: </PathGeometry> 13: </Path.Data> 14: </Path>

Для эмуляции поведения IsStroked в коде можно воспользоваться методом-расширением, имеющим различные реализации в Silverlight и WPF:

1: public static void AddLineSegment 2: (this PathGeometry pathGeometry, Point point, bool isStroked) 3: { 4: PathFigure figure = 5: pathGeometry.Figures[pathGeometry.Figures.Count - 1]; 6: 7: #if SILVERLIGHT 8: if (isStroked) 9: { 10: figure.Segments.Add(new LineSegment { Point = point }); 11: } 12: else 13: { 14: // silverlight has no IsStroked properto on LineSegment 15: // so we create a new PathFigure to imitate non-stroked 16: // line segment 17: figure = new PathFigure(); 18: figure.StartPoint = point; 19: pathGeometry.Figures.Add(figure); 20: } 21: #else 22: figure.Segments.Add(new LineSegment(point, isStroked)); 23: #endif 24: }

Такой метод удобен при создании последовательностей линий в коде:

myPathGeometry.AddLineSegment(myPoint, true);

Этот метод может также быть обобщен на другие типы PathSegment, что можно считать небольшим дополнительным заданием.

Таким приемом можно пользоваться в достаточно простых случаях, однако проблему в следующем примере обойти уже не так тривиально:

Рисунок 10.8. Последовательность линий с заливкой.

В случае WPF такая фигура задается разметкой:

1: <Path HorizontalAlignment="Center" VerticalAlignment="Center"

2: Stroke="Black" Fill="LightGreen" StrokeThickness="3">

3: <Path.Data>

4: <PathGeometry>

5: <PathFigure StartPoint="0,40">

6: <LineSegment Point="0,20" IsStroked="False" />

7: <LineSegment Point="20,0" />

8: <LineSegment Point="40,20" />

9: <LineSegment Point="60,20" IsStroked="False" />

10: <LineSegment Point="80,0" />

11: <LineSegment Point="100,20" />

12: <LineSegment Point="100,40" IsStroked="False" />

13: </PathFigure>

14: </PathGeometry>

15: </Path.Data>

16: </Path>

К сожалению, для достижения такого же эффекта в Silverlight приходится использовать 2 независимые пересекающиеся последовательности – одну для заливки, и другую для собственно отображения линий:

1: <Path Fill="LightGreen" StrokeThickness="3">

2: <Path.Data>

3: <PathGeometry>

4: <PathFigure StartPoint="0,40">

5: <LineSegment Point="0,20"/>

6: <LineSegment Point="20,0" />

7: <LineSegment Point="40,20" />

8: <LineSegment Point="60,20"/>

9: <LineSegment Point="80,0" />

10: <LineSegment Point="100,20" />

11: <LineSegment Point="100,40" />

12: </PathFigure>

13: </PathGeometry>

14: </Path.Data>

15: </Path>

16:

17: <Path Stroke="Black" StrokeThickness="3">

18: <Path.Data>

19: <PathGeometry>

20: <PathFigure StartPoint="0,20">

21: <LineSegment Point="20,0" />

22: <LineSegment Point="40,20" />

23: </PathFigure>

24: <PathFigure StartPoint="60,20">

25: <LineSegment Point="80,0" />

26: <LineSegment Point="100,20" />

27: </PathFigure>

28: </PathGeometry>

29: </Path.Data>

30: </Path>

Очевидно, что для написания совместимой WPF/Silverlight разметки во всех подобных случаях придется использовать Silverlight вариант.


Дата добавления: 2015-08-13; просмотров: 93 | Нарушение авторских прав


Читайте в этой же книге: Реализация INotifyCollectionChanged. | Создание представления, определенного как шаблон данных. | Краткие итоги | В паттерне MVVM инкапсулирует логику представления и данные для отображения (англ. яз.). | Интерфейс, предоставляющий базовую поддержку валидации данных и сообщения об ошибках | Шаг 4. View | Шаг 4. Редактирование | Шаг 5. Команды | Создание ссылок на XAML файлы | Синхронное использование XAML |
<== предыдущая страница | следующая страница ==>
Отсутствие метода OverrideMetadata()| Краткие итоги

mybiblioteka.su - 2015-2024 год. (0.007 сек.)