从代码和xaml定义和使用资源

时间:2014-07-22 14:19:54

标签: c# xaml windows-phone-8 windows-phone

我正在尝试将Colors,Brushes和其他几个定义为系统资源,稍后从代码和xaml中使用它们就像我在AppResources.resx中定义了字符串并在代码中使用它们

MyApp.Resources.AppResources.MyStringResource

和xaml一样

Text="{Binding Source={StaticResource LocalizedStrings}, Path=LocalizedResources.MyStringResource}"

我在寻找解决方案的时候在几个地方偶然发现ResourceDictionary。但我还不知道如何以及在何处添加ResourceDictionary

我尝试在App.xaml中添加它,如下所示:

<Application.Resources>
        <ResourceDictionary>
            <local:LocalizedStrings xmlns:local="clr-namespace:DataBoundApp1" x:Key="LocalizedStrings"/>
            <SolidColorBrush Color="#FF0000" x:Key="ErrorColor"></SolidColorBrush>
        </ResourceDictionary>
</Application.Resources>

但我不知道如何在Code和xaml中使用它。还有其他任何方式或地方我可以添加ResourceDictionary或任何其他东西,以便以后再次使用。

请帮助!

2 个答案:

答案 0 :(得分:2)

我在尝试实现这一目标时遇到了很多解决方案,并最终得到了最佳解决方案。请按照以下步骤操作。

首先在项目中创建一个名为主题的文件夹,然后在其中添加一个类文件。命名名为 Generic.xaml 的类文件,替换现有的C#代码并将以下文件添加到其中。

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">    
<SolidColorBrush Color="#FF0000" x:Key="ErrorColor"></SolidColorBrush>
</ResourceDictionary>

重建项目。然后在App.xaml中添加以下代码行。

<Application.Resources>
   <ResourceDictionary>
       <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Themes/Generic.xaml"/>
       </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

最后在项目中的任何地方应用样式,如下所示

<TextBlock Text="Hello" Foreground="{StaticResource ErrorColor}"/>

Generic.xaml 中添加所需的样式,并在项目中调用这些样式。

答案 1 :(得分:1)

您可以在xaml中使用solidColorBrush,如下所示:

<Border BorderThickness="1"
        BorderBrush="{StaticResource ErrorColor}">
</Border>

See link for more details on using Application Resources

See here for a more in depth look at Xaml resources in general

修改

在代码背后,虽然我不建议这样做,因为你会有更多的错误空间:

SolidColorBrush = this.FindResource("ErrorColor") as SolidColorBrush;