C# WinRT将压缩路径标记(字符串资源)绑定到路径数据

C# WinRT将压缩路径标记(字符串资源)绑定到路径数据,c#,xaml,user-controls,windows-runtime,C#,Xaml,User Controls,Windows Runtime,我的目标:我想创建一个名为DynamicButton的可重用用户控件(在这个应用程序中可重用,我不需要在不同的项目中使用),它显示3种不同的形状。按钮的每个实例都有一组不同的3个形状 我试图分别定义路径形状,以便重用它们(我将在多个页面上的DynamicButton中使用Path1)。我经历了几次迭代,试图找到一些有效的方法。首先,我尝试将路径定义为资源,然后将这些资源传递给我的DynamicButton类,以便将它们添加到按钮的内部网格中,但它不起作用,因为路径对象已被视为视图层次结构中的其他

我的目标:我想创建一个名为
DynamicButton
的可重用用户控件(在这个应用程序中可重用,我不需要在不同的项目中使用),它显示3种不同的形状。按钮的每个实例都有一组不同的3个形状

我试图分别定义路径形状,以便重用它们(我将在多个页面上的DynamicButton中使用Path1)。我经历了几次迭代,试图找到一些有效的方法。首先,我尝试将路径定义为资源,然后将这些资源传递给我的
DynamicButton
类,以便将它们添加到按钮的内部网格中,但它不起作用,因为路径对象已被视为视图层次结构中的其他位置,因此它不允许我将其放入
DynamicButton
的视图层次结构中。(详情请参见)

因此,我决定尝试使用如下所示的紧凑形状标记语法生成路径。我想我可以将它作为字符串传递到我的
DynamicButton
代码中,然后我可以使用该字符串以编程方式创建路径。然而,在代码中似乎没有为路径对象提供紧凑的语法。它只在XAML中工作

现在,我尝试使用带绑定的模板控件,尝试将形状路径标记放入路径对象中

我已经定义了一个字符串,其中包括用于描述形状的紧凑路径标记语法:

<x:String x:Key="ShapeView_N">M 131.12,10.6 L 141.17,10.6 L 141.17,85.34 L 132.07,85.34 L 82.68,27.78 L 82.68,85.34 L 72.74,85.34 L 72.74,10.6 L 81.31,10.6 L 131.12,68.65 L 131.12,10.6 L 131.12,10.6</x:String>
如果我将ShapeView_N字符串直接放入路径的Data属性中,这将是完全有效的xaml,并且可以很好地编译。像这样:

<Path x:Name="PathWhite" Data="M 131.12,10.6 L 141.17,10.6 L 141.17,85.34 L 132.07,85.34 L 82.68,27.78 L 82.68,85.34 L 72.74,85.34 L 72.74,10.6 L 81.31,10.6 L 131.12,68.65 L 131.12,10.6 L 131.12,10.6" Fill="White" />

但是,当我尝试使用TemplateBinding将其放在那里时,我的应用程序崩溃,因为
数据
需要一个
路径
对象,而不是
字符串
:(但是,如果我在xaml中的
数据中放入字符串文字,效果就很好

我觉得这应该没那么难。我有一些路径数据。我想有一个自定义的UserControl,它可以接受3条不同格式的路径。任何格式都可以


帮助?

您可以使用将字符串转换为几何图形,但我会使用
数据模板
来代替。您可以使用指定的几何图形定义
数据模板
中包含
路径
元素的
资源,然后将其用作按钮的
内容模板
值。

您可以使用'x:Shared>=资源上的“false”属性,即要跨多个控件共享的路径。看起来x:Shared仅适用于WPF,但这是Windows应用商店应用。
<Path x:Name="PathWhite" Data="{TemplateBinding ShapeString}" Fill="White" />
<Path x:Name="PathWhite" Data="M 131.12,10.6 L 141.17,10.6 L 141.17,85.34 L 132.07,85.34 L 82.68,27.78 L 82.68,85.34 L 72.74,85.34 L 72.74,10.6 L 81.31,10.6 L 131.12,68.65 L 131.12,10.6 L 131.12,10.6" Fill="White" />