如何在Windows Phone 8中将ResourceDictionary用作StaticResource(元素不是fount)

时间:2014-01-16 07:28:05

标签: windows windows-phone-8

我正在创建一个Windows Phone 8应用。在应用程序中,我在XAML文件中定义了一个ResourceDictionary:

     <Style TargetType="TextBlock">
        <Setter Property="Foreground" Value="YellowGreen" />
        <Setter Property="FontSize" Value="35" />
        <Setter Property="TextWrapping" Value="Wrap"/>
    </Style>

    <Style TargetType="TextBox" x:Key="CommonSetters">
        <Setter Property="Width" Value="450"/>
        <Setter Property="FontSize" Value="35" />
        <Setter Property="Foreground" Value="YellowGreen" />
        <Setter Property="Height" Value="100"/>
        <Setter Property="Background" Value="Red">
            <!--<Setter.Value>
                <ImageBrush ImageSource="logo.png" Opacity="0.1"/>
            </Setter.Value>-->
        </Setter>
    </Style>

</ResourceDictionary>

此ResourceDictionary在App.xaml中引用为:

        的xmlns:壳= “CLR-名称空间:Microsoft.Phone.Shell;装配= Microsoft.Phone” &GT;

    <!--Application Resources-->
    <Application.Resources>
        <local:LocalizedStrings xmlns:local="clr-namespace:Work_Force" x:Key="LocalizedStrings"/>
        <ResourceDictionary x:Key="myDict">
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resource.xaml"/>
            </ResourceDictionary.MergedDictionaries>

        </ResourceDictionary>
        <Style TargetType="TextBlock" x:Key="NN">
            <Setter Property="Width" Value="450"/>
            <Setter Property="FontSize" Value="35" />
            <Setter Property="Foreground" Value="YellowGreen" />
            <Setter Property="Height" Value="100"/>
        </Style>
    </Application.Resources>

    <Application.ApplicationLifetimeObjects>
        <!--Required object that handles lifetime events for the application-->
        <shell:PhoneApplicationService
            Launching="Application_Launching" Closing="Application_Closing"
            Activated="Application_Activated" Deactivated="Application_Deactivated"/>
    </Application.ApplicationLifetimeObjects>

</Application>

然后很容易做到:

     

静态资源NN工作正常,但commonSetters在resourse.xaml中声明它没有工作。

2 个答案:

答案 0 :(得分:1)

您在App.xaml中定义资源的方式,您的'myDict'资源字典是Application.Resources默认字典中的嵌套字典。我不知道如何在XAML中引用嵌套字典中的资源的任何语法(因为我还不需要它;我认为来自代码的FindResource(...)可以实现这一点)。解决问题的方法是,直接修改Application.Resources的默认字典以与“资源”字典合并。您可以通过修改Application.Resources部分来执行此操作:

<Application.Resources>
    <ResourceDictionary>
        <local:LocalizedStrings xmlns:local="clr-namespace:PhoneApp1" x:Key="LocalizedStrings"/>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Resources.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

请注意,现在您还没有名为“myDict”的ReosurceDictionary。您的“资源”字典将直接合并到默认字典中,该字典没有密钥。然后资源将被正确解析。

答案 1 :(得分:0)

最后我得到的解决方案类似于aspx或html页面,我们在所需页面中添加样式的引用

无论你在哪里,都需要在你需要的页面中添加页面的引用

       <phone:PhoneApplicationPage.Resources>
          <ResourceDictionary Source="yourstylepage.xaml"/>     
        </phone:PhoneApplicationPage.Resources>

将上述代码放在<phone:PhoneApplicationPage>

之后