我收到错误Object reference not set to an instance of an object
。我想我不会初始化一些东西。
这是代码;错误在第if (btn.Background.Equals(new SolidColorBrush(Color.FromArgb(0, 0, 0, 0))))
行:
private void vbOpenGuiaMaestro_Tapped(object sender, TappedRoutedEventArgs e)
{
Button btn = default(Button);
if (btn.Background.Equals(new SolidColorBrush(Color.FromArgb(0, 0, 0, 0))))
{
btn.Background = materiaColor;
btn.Foreground = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255));
stckTeachersGuideClosed.Visibility = Visibility.Visible;
stckTeachersGuideOpened.Visibility = Visibility.Collapsed;
}
else
{
btn.Background = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0));
btn.Foreground = new SolidColorBrush(Color.FromArgb(255, 140, 140, 140));
}
}
答案 0 :(得分:6)
default(Button)
为您提供null
,因为Button
是引用类型。我想你想要
Button btn = (Button)sender;
答案 1 :(得分:1)
问题是您的发件人是StackPanel ,并且您正在将其投射到Button。错!
StackPanel stackPanel = sender as StackPanel;
if(stackPanel != null)
{
if (stackPanel.Background.Equals(new SolidColorBrush(Color.FromArgb(0, 0, 0, 0))))
{
stackPanel.Background = materiaColor;
stckTeachersGuideClosed.Visibility = Visibility.Visible;
stckTeachersGuideOpened.Visibility = Visibility.Collapsed;
}
else
{
stackPanel.Background = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0));
}
}
答案 2 :(得分:0)
您的错误在Button btn = default(Button);
。这是将按钮设置为null
,因为这是该类的默认值。
您应该将sender
对象转换为Button
,然后验证sender
不为空(如果事件不是由按钮生成的话)。
var btn = sender as Button;
if (btn != null)
{
...
}
答案 3 :(得分:0)
在sender
对象中,您可以引用触发此事件的UI上的控件。它是对象类型,但您可以将其强制转换为所需类型(在本例中为Button
)。
所以得到这样的按钮的引用:
var btn = (Button) sender;
或者,您也可以使用:
var btn = sender as Button;
不同之处在于,在第一种情况下,如果演员阵容不成功,它会给你一个InvalidCastException
。在第二种方式中,即使您指定的类型不是预期的类型,它也将默默地尝试转换它,但是当对象被滥用时会进一步崩溃。