2

У меня есть этот код XAML, который делает Path, который находится внутри Canvas, находясь на странице MainPage.xaml.Настройка пути.Data с кодом

<Path x:Name="progressPath" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Stroke="Gold" StrokeThickness="5" 
     Canvas.Left="300" Canvas.Top="300" Height="305" Width="305" 
     Data="m 150,0 A 150,0 0 0 0 150,0 A 150,150 0 0 0 150,0"> 
    </Path> 

Я хочу иметь несколько Path «S, как этот (например, новый Path сделан, когда пользователь нажимает кнопку), так что я решил создать их в коде-за - который Безразлично» Кажется, это возможно.

Path «s Data заполняется move and draw commands синтаксис, который не может непосредственно использоваться как текстовое значение (как показано выше) в коде-за, как это может быть в XAML - я нашел workarounds for this в Silverlight, и я попытался такая же техника в моем приложении Metro/Windows-Store, но, хотя она правильно компилируется, на экране нет Path.


Т.Л., др Как создать этот Path в код-за с Data будучи, как показано?

ответ

3

У меня был этот пробник слишком давно в winrt. Кажется, что вы не можете присвоить значение «путь» непосредственно в коде.

Однако есть решение here

Я использовал этот класс в WinRT без каких-либо проблем. Все, что мне нужно было сделать, это изменить подписи методов Convert и ConvertBack для реализации интерфейса IValueConverter, как в winrt, а не в silverlight. Вот они

public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     string path = value as string; 
     if (null != path) 
      return Convert(path); 
     else 
      return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     PathGeometry geometry = value as PathGeometry; 

     if (null != geometry) 
      return ConvertBack(geometry); 
     else 
      return default(string); 
    } 

Использование: (более или менее)

var stringToPathGeometryConverter = new StringToPathGeometryConverter(); 
string pathData = "m 150,0 A 150,0 0 0 0 150,0 A 150,150 0 0 0 150,0" ; 
progressPath.Data = stringToPathGeometryConverter.Convert(pathData); 
+0

Работает отлично! –

2

Другой способ сделать это состоит в использовании XamlReader для этого с apropriate строки загруженной. В C# 6.0 это может выглядеть так:

Path pathFromCode = XamlReader.Load($"<Path xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'><Path.Data>{stringPathData}</Path.Data></Path>") as Path; 

 Смежные вопросы

  • Нет связанных вопросов^_^