C# 以编程方式应用笔刷
我试图用一个名为PrecipHour的本地资源(LinearGradientBrush)填充一个称为Key的矩形。当我运行下面的代码时,会抛出一个nullreferenceexception—我是否可以将资源转换为LinearGradientBrush C# XAMLC# 以编程方式应用笔刷,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
ANullReferenceException
表示某个为null的内容被视为非null。如果这是一个cast问题,那么您将得到一个InvalidCastException
。您的代码是:
key.Fill = (LinearGradientBrush)this.Resources["PrecipHour"];
有三种可能的对象正在访问其属性,因此可能为空:
键
此
this.Resources
这个
永远不能为空,因此我们只剩下1和3。您可以使用调试器,甚至只使用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"];