简体   繁体   中英

this.Resources throws a NullReferenceException?

I am trying to access an app resource from my resources like this:

LinearGradientBrush lb = Application.Current.Resources["FFG"] as LinearGradientBrush;

However, this throws a NullReferenceException. I tried this code to see what was null:

Debug.WriteLine(this.Resources.Count());

Also returned a NullReferenceException.

What's even stranger is that this works:

(Storyboard)this.Resources["LayersOut"]).Begin();

Can this.Resources possibly be null, even when I have all of this in the resources area of the XAML?

Note that my code above is ran after InitializeComponent();

(Removed all of the storyboards for ease of reading)

<phone:PhoneApplicationPage.Resources>
<LinearGradientBrush x:Key="PrecipBrush" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF490000" Offset="0"/>
        <GradientStop Color="#FFE8E8E8" Offset="1"/>
        <GradientStop Color="#FF2044E4" Offset="0.838"/>
        <GradientStop Color="#FF17A598" Offset="0.653"/>
        <GradientStop Color="#FF22BB00" Offset="0.445"/>
        <GradientStop Color="#FFFFE800" Offset="0.253"/>
        <GradientStop Color="#FFFF0202" Offset="0.125"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="MRMS" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="Red" Offset="0"/>
        <GradientStop Color="#FFAB59FD" Offset="1"/>
        <GradientStop Color="#FF2044E4" Offset="0.838"/>
        <GradientStop Color="#FF17A598" Offset="0.653"/>
        <GradientStop Color="#FF22BB00" Offset="0.445"/>
        <GradientStop Color="#FF005D00" Offset="0.253"/>
        <GradientStop Color="Yellow" Offset="0.125"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="FFG" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF460055" Offset="0"/>
        <GradientStop Color="#FF23FF00" Offset="1"/>
        <GradientStop Color="Yellow" Offset="0.815"/>
        <GradientStop Color="Magenta" Offset="0.253"/>
        <GradientStop Color="#FFB400A3" Offset="0.125"/>
        <GradientStop Color="#FFB69D00" Offset="0.642"/>
        <GradientStop Color="#FFB60000" Offset="0.43"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="DroughtKey" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF490000" Offset="0"/>
        <GradientStop Color="#FFFFD100" Offset="1"/>
        <GradientStop Color="#FFB67C00" Offset="0.653"/>
        <GradientStop Color="#FF746400" Offset="0.445"/>
        <GradientStop Color="Red" Offset="0.253"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="ForestFire" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF490000" Offset="0"/>
        <GradientStop Color="#FFFFD100" Offset="1"/>
        <GradientStop Color="Red" Offset="0.253"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="QPF" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="Red" Offset="0"/>
        <GradientStop Color="#FF68FF00" Offset="1"/>
        <GradientStop Color="#FF28B000" Offset="0.838"/>
        <GradientStop Color="#FF0800BB" Offset="0.445"/>
        <GradientStop Color="#FF00FFD1" Offset="0.253"/>
        <GradientStop Color="#FFDC00FF" Offset="0.125"/>
        <GradientStop Color="#FF126300" Offset="0.626"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="Temp" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="Red" Offset="0"/>
        <GradientStop Color="#FF070097" Offset="1"/>
        <GradientStop Color="#FF035FFF" Offset="0.838"/>
        <GradientStop Color="#FF23FF00" Offset="0.445"/>
        <GradientStop Color="Yellow" Offset="0.253"/>
        <GradientStop Color="#FFFF5D00" Offset="0.125"/>
        <GradientStop Color="#FF00FFF3" Offset="0.626"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="PrecipAvg" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF661C00" Offset="0"/>
        <GradientStop Color="#FF17A600" Offset="1"/>
        <GradientStop Color="#FF26EC4A" Offset="0.838"/>
        <GradientStop Color="#FFDCFF00" Offset="0.445"/>
        <GradientStop Color="#FFFF8000" Offset="0.253"/>
        <GradientStop Color="#FF9B3800" Offset="0.125"/>
        <GradientStop Color="#FF65E040" Offset="0.626"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="PrecipHour" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="#FF661C00" Offset="0"/>
        <GradientStop Color="#FF0011BF" Offset="1"/>
        <GradientStop Color="#FF265CEC" Offset="0.838"/>
        <GradientStop Color="#FF2EFF00" Offset="0.445"/>
        <GradientStop Color="#FFF3FF00" Offset="0.253"/>
        <GradientStop Color="Red" Offset="0.125"/>
        <GradientStop Color="#FF65E040" Offset="0.626"/>
    </LinearGradientBrush>
</phone:PhoneApplicationPage.Resources>

Application.Current.Resources refers to the resources defined in App.xaml, not the current page. Try accessing this way in the code behind:

    LinearGradientBrush lb = this.Resources["FFG"] as LinearGradientBrush;

or move the brush definition on App.xaml and then your code should work too:

   LinearGradientBrush lb = Application.Current.Resources["FFG"] as LinearGradientBrush;

You need to write the following code in your App.xaml :

 <Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Path to your resource file" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Then you'll can get it like this:

LinearGradientBrush lb = Application.Current.Resources["FFG"] as LinearGradientBrush;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM