Читайте также:
|
|
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 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Отсутствие метода OverrideMetadata() | | | Краткие итоги |