C# 以编程方式应用笔刷

C# 以编程方式应用笔刷,c#,xaml,windows-phone-8,windows-phone,C#,Xaml,Windows Phone 8,Windows Phone,我试图用一个名为PrecipHour的本地资源(LinearGradientBrush)填充一个称为Key的矩形。当我运行下面的代码时,会抛出一个nullreferenceexception—我是否可以将资源转换为LinearGradientBrush C# XAML ANullReferenceException表示某个为null的内容被视为非null。如果这是一个cast问题,那么您将得到一个InvalidCastException。您的代码是: key.Fill = (LinearGra

我试图用一个名为PrecipHour的本地资源(LinearGradientBrush)填充一个称为Key的矩形。当我运行下面的代码时,会抛出一个nullreferenceexception—我是否可以将资源转换为LinearGradientBrush

C#

XAML



A
NullReferenceException
表示某个为null的内容被视为非null。如果这是一个cast问题,那么您将得到一个
InvalidCastException
。您的代码是:

key.Fill = (LinearGradientBrush)this.Resources["PrecipHour"];
有三种可能的对象正在访问其属性,因此可能为空:

  • this.Resources

  • 这个
    永远不能为空,因此我们只剩下13。您可以使用调试器,甚至只使用
    Debug.Assert
    语句来确定哪些语句失败。

    它应该可以工作。您将资源放在哪里?电话:PhoneApplicationPage.Resources,正确无误。实际上,在再次阅读代码之后,我意识到它不可能抛出null引用异常,除非
    key
    为null。您确定该异常是由此行引发的吗?您应该使用调试器一步一步地执行代码,并检查变量的值,以了解方法中每一行的注释和执行代码的内容。一切顺利。未注释问题中的行并引发异常。显然,Precip包含的小时数是正确的,否则其余部分甚至不会触发。我不认为
    这可能是重复的。参考资料
    可能为空。只剩下
    。我的灵力告诉我,@Kevin试图在调用
    InitializeComponents
    I not之前在页面的构造函数中访问它-在用户点击两个按钮之前,它不会运行。该行包含在方法UpdateKey中,当用户点击按钮并触发一个方法,然后触发UpdateKey时,就会运行该方法。这给了程序更多的时间来初始化它自己。我尝试执行Application.Current.Resources.Count().ToString()以查看资源是否存在某种问题,它抛出了NotImplementeDexeption?因此当您使用类似Application.Current.Resources.Count()的链式命令时由于无法判断异常来自何处,最好将其拆分为单独的行(将每个行分配给一个变量),这样我们就可以知道异常来自何处(或者使用调试器来找出它)。仅仅知道序列中的某些东西抛出NotImplementDexeption并没有多大帮助。
    <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>
    
    key.Fill = (LinearGradientBrush)this.Resources["PrecipHour"];