我的目标 :我想创建一个名为DynamicButton
的可重用UserControl(在此应用中可重用,我不需要在不同的项目中使用它) )它显示3种不同的形状。按钮的每个实例都有一组不同的3个形状。
我试图分别定义路径形状,以便可以重复使用(我将在多个页面上的DynamicButton中使用Path1)。我经历了几次迭代试图找到有用的东西。起初我只是尝试将路径定义为资源,然后将这些资源传递给我的DynamicButton
类,以便将它们添加到按钮的内部网格中,但它不起作用,因为Path对象已经被认为是视图层次结构中的其他位置,因此不允许我将其放入DynamicButton
的视图层次结构中。 (有关详细信息,请参阅WinRT XAML trying to use a Path defined in ResourceDictionary, but "Element is already the child of another element.")。
所以,然后我决定尝试使用下面显示的紧凑形状标记语法生成我的路径。我想我会把它作为一个字符串传递给我的DynamicButton
代码然后我可以使用该字符串以编程方式创建Path。但是,似乎没有任何方法可以将这种紧凑的语法赋予代码中的Path对象。它只适用于XAML。
现在我正在尝试使用带有绑定的模板化控件来尝试将形状路径标记放入Path对象。
我已经定义了一个字符串,其中包含用于描述形状的紧凑Path标记语法:
<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>
我想将它传递给我的自定义UserControl(DynamicButton),以便我的控件可以使用它创建路径。
<local:DynamicButton x:Name="MyButton"
ShapeString="{StaticResource ShapeView_N}"
/>
在我DynamicButton
的模板中,我有这样的代码:
<Path x:Name="PathWhite" Data="{TemplateBinding ShapeString}" Fill="White" />
如果我将ShapeView_N字符串直接放入Path的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将其放到那里时,我的应用程序崩溃了,因为Data
需要Path
对象而不是string
。 :(但是,如果我在我的xaml中将字符串文字放入Data
,那就可以了。
我觉得这不应该这么难。我有一些路径数据。我想要一个自定义的UserControl,它接受一些格式的3个路径。任何格式都可以。
帮助?
答案 0 :(得分:0)
您可以使用StringToPathGeometryConverter
将字符串转换为几何图形,但我会使用DataTemplate
代替。您可以使用指定的几何定义其中包含DataTemplate
元素的Path
个资源,然后将这些作为按钮的ContentTemplate
值使用。