我有这个XAML代码,它使Path
位于MainPage.xaml页面中的Canvas
内。
<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
像这样(例如,当用户点按一个按钮时会生成一个新的Path
),所以我决定在代码隐藏 - 似乎不可能。
Path
的{{1}}填充了move and draw commands语法,不能直接用作代码隐藏中的文本值(如上所示),就像它可以在xaml中 - 我在Silverlight中找到了workarounds for this,我在Metro / Windows-Store应用程序中尝试了相同的技术但是虽然它正确编译但屏幕上没有Data
。
tl; dr 如何在代码隐藏中创建此Path
并显示Path
?
答案 0 :(得分:3)
我刚才在冬天遇到过这个问题。看来你不能指定一条路径&#34;值直接在代码后面。
但是有一个解决方案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);
答案 1 :(得分:2)
另一种方法是在加载适当的字符串时使用 XamlReader 。在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;