【发布时间】:2014-08-27 04:27:52
【问题描述】:
我的目标:我想创建一个名为 DynamicButton 的可重复使用的 UserControl(可在此应用中重复使用,我不需要在不同的项目中使用它)显示 3 种不同的形状。按钮的每个实例将有一组不同的 3 个形状。
我尝试单独定义路径形状,以便它们可以重复使用(我将在多个页面上的 DynamicButton 中使用 Path1)。我经历了几次迭代,试图找到可行的方法。起初我只是试图将路径定义为资源,然后将这些资源传递给我的DynamicButton 类,以便它们可以添加到按钮的内部网格中,但它不起作用,因为路径对象已经被认为是在其他地方视图层次结构,因此它不会让我将其放入DynamicButton 的视图层次结构中。 (详见WinRT XAML trying to use a Path defined in ResourceDictionary, but "Element is already the child of another element.")。
因此,我决定尝试使用如下所示的紧凑形状标记语法生成路径。我想我只是将它作为一个字符串传递给我的DynamicButton 代码,然后我可以使用该字符串以编程方式创建路径。但是,似乎无论如何都没有将紧凑的语法赋予代码中的 Path 对象。它仅适用于 XAML。
现在我正在尝试使用带有绑定的模板化控件来尝试将形状路径标记放入 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 中,那就可以了。
我觉得这不应该这么难。我有一些路径数据。我想要一个自定义的用户控件,它接受某些格式的 3 个路径。任何格式都可以。
帮助?
【问题讨论】:
-
您可以在资源上使用`x:Shared="false" 属性,您希望在多个控件之间共享路径。
-
看起来 x:Shared 仅适用于 WPF,但这是一个 Windows App Store 应用程序。
标签: c# xaml user-controls windows-runtime