如何在UWP中使用资源字典中的路径数据

时间:2016-02-12 13:52:57

标签: xaml win-universal-app

这是微不足道的事情,但它不起作用。

我有这样的东西(它在自己的文件夹中)

<ResourceDictionary>
    <Path x:Key="Test"
          Stroke="Black"
          Fill="Gray" 
          Data="M 10,100 C 10,300 300,-200 300,100" />
</ResourceDictionary>

现在我想用它

<Page>
    <Page.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergeDictionaries>
                <ResourceDictionary Source="MyFolder/MyResourceDictionary.xaml/>
            </ResourceDictionary.MergeDictionaries>
        </ResourceDictionary>
    </Page.Resources>
    <ContentPresenter Content="{StaticResource Test}"/>
<Page/>

这会引发异常,但我不明白为什么。在wpf中完全相同的情况可以正常工作。

2 个答案:

答案 0 :(得分:5)

这个解决方案怎么样?

声明您的GeometryData

<x:String x:Key="TestPathGeomerty">M 10,100 C 10,300 300,-200 300,100</x:String>

并使用Path,而不是ContentPresenter

<Path Data="{StaticResource TestPathGeomerty}"
      Fill="Red"/>

答案 1 :(得分:1)

在WPF中,您可以在多个控件中共享同一个实例。不幸的是,这在UWP中是不可能的。

唯一可以保证在UWP中工作的解决方案是在包含图标的资源中定义DataTemplate。

最好使用PathIcon而不是Path。 PathIcon使用将从父控件继承的Foreground属性。

以下是有关如何共享将自动缩放(通过使用Viewbox)的图标的数据路径的示例。

<Page.Resources>
    <DataTemplate x:Key="MagnifyingGlassPathIconCT">
        <Viewbox Stretch="Uniform">
            <PathIcon Data="M44,12 C32,12 22,22 22,34 22,46 32,56 44,56 56,56 66,46 66,34 66,22 56,12 44,12z M44,0 C63,0 78,15 78,34 78,53 63,68 44,68 40,68 36.5,67.5 33,66 L32.5,66 14,90 0,79.5 18,55.5 17,55 C13,49 10,42 10,34 10,15 25,0 44,0z" />
        </Viewbox>
    </DataTemplate>
</Page.Resources>

<StackPanel Padding="40" HorizontalAlignment="Left">
    <!--  Plain icon  -->
    <ContentPresenter
        Width="40"
        Height="40"
        ContentTemplate="{StaticResource MagnifyingGlassPathIconCT}"
        Foreground="Purple" />
    <!--  Icon with a border  -->
    <Border
        Width="40" Padding="7"
        Height="40"
        BorderBrush="Black"
        BorderThickness="2">
        <ContentPresenter ContentTemplate="{StaticResource MagnifyingGlassPathIconCT}" Foreground="Red" />
    </Border>
    <!--  Icon in a normal Button  -->
    <Button
        Width="40"
        Height="40"
        ContentTemplate="{StaticResource MagnifyingGlassPathIconCT}"
        Foreground="RoyalBlue" />
    <!--  Icon in an AppBarButton  -->
    <AppBarButton
        Width="40"
        ContentTemplate="{StaticResource MagnifyingGlassPathIconCT}"
        Foreground="Black"
        Label="Search" />
</StackPanel>

This is the result