Можно ли создать путь в Silverlight исключительно с помощью привязок данных? - PullRequest
2 голосов
/ 28 марта 2011

Я хотел бы динамически создать путь, который состоит из нескольких сегментов Безье.

Я хотел бы связать данные так, чтобы моему источнику данных требовалось только указывать числа. приложение не должно создавать геометрические объекты в коде.

Возможно ли это?

Обновление:

Вот пример для фиксированного количества сегментов пути:

<Path Stroke="Black">
    <Path.Data>
        <PathGeometry>
            <PathFigure StartPoint ="{Binding CalculatedPointA, Mode=OneWay}">
                <LineSegment Point="{Binding CalculatedPointB, Mode=OneWay}" />
                <LineSegment Point="{Binding CalculatedPointC, Mode=OneWay}" />
                <LineSegment Point="{Binding CalculatedPointA, Mode=OneWay}" />
            </PathFigure>
       </PathGeometry>
   </Path.Data>
</Path>

Я хотел бы иметь переменное количество сегментов.

Ответы [ 2 ]

0 голосов
/ 08 января 2013

Свяжите атрибут Data в элементе Path в XAML с свойством DependencyProperty типа String в модели представления. Используйте код для построения строкового представления оператора Path: «F0 M 10,10 L100,10 A 1,1,1,1,110,10 L 200,10».

Вот свойство:

Public Shared ReadOnly PathDataProperty As DependencyProperty = DependencyProperty.Register("PathData", GetType(System.String), GetType(LineViewModel), Nothing)
    Public Property PathData As String
        Get
            Return Me.GetValue(PathDataProperty)
        End Get
        Set(ByVal value As String)
            Me.SetValue(PathDataProperty, value)
            RaisePropertyChanged(MethodBase.GetCurrentMethod().Name.Substring(4))
        End Set
    End Property

Вот XAML:

<Path x:Name="PrimaryPath" 
          StrokeThickness="{Binding LineThickness, Source={StaticResource LineVM}, Mode=OneWay}" 
          Stroke="{Binding LineColor, Source={StaticResource LineVM}, Mode=OneWay}" 
          Data="{Binding PathData, Source={StaticResource LineVM}, Mode=OneWay, Converter={StaticResource myConv}}">
    </Path>

Загрузите конвертер StringToPathGeomertry с http://stringtopathgeometry.codeplex.com/..

Вы должны быть готовы!

0 голосов
/ 28 марта 2011

Ответ на ваш настоящий вопрос таков: нет, невозможно связать данные таким образом, чтобы динамически создавать траектории или сегменты без использования кода (или использования дополнительного компонента, где какой-либо сторонний пользователь написал код).*

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

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