• Slider绑定事件,初始化NullPointerException错误


           最近刚刚接触Silverlight,随便在网上找了一个入门的博文http://www.cnblogs.com/Terrylee/archive/2008/03/07/Silverlight2-step-by-step-part3.html,在给Slider绑定事件的时候,出现了NullPointerException错误,

    求教了其他了知道了里面的错误。

           

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Net;
     5 using System.Windows;
     6 using System.Windows.Controls;
     7 using System.Windows.Documents;
     8 using System.Windows.Input;
     9 using System.Windows.Media;
    10 using System.Windows.Media.Animation;
    11 using System.Windows.Shapes;
    12 
    13 namespace SLApplicationEx
    14 {
    15     public partial class MainPage : UserControl
    16     {
    17         public MainPage()
    18         {
    19             InitializeComponent();            
    20         }     
    21 
    22         
    23         private void RedSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    24         {
    25             Color color = Color.FromArgb((byte)AlphaSlider.Value, (byte)RedSlider.Value, (byte)GreenSlider.Value, (byte)BlueSlider.Value);
    26 
    27             PreviewColor.Fill = new SolidColorBrush(color);
    28             HexColor.Text = color.ToString();
    29         }
    30 
    31        
    32     }
    33 }
    MainPage.xaml.cs

            因为在MainPage.xaml中,对Slider设置了初始值,所以初始化的时候,便会执行RedSlider_ValueChanged事件,而此时,

    几个Slider实例(AlphaSlider,RedSlider,GreenSlider,BlueSlider)并没有初始化,都是null,所以,会在RedSlider_ValueChanged

    内出错。

            正确的做法可以有两种:

             (一)不为Slider设置初始值

              这样,在程序初始化的时候,RedSlider_ValueChanged事件就不会被触发。

     1 <StackPanel Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" VerticalAlignment="Center">
     2             <TextBlock Text="Alpha" FontSize="12" Margin="10,15,0,0"/>
     3             <Slider x:Name="AlphaSlider" Margin="20,0,10,0" Maximum="255" ValueChanged="RedSlider_ValueChanged"/>
     4             <TextBlock Text="Red" FontSize="12" Margin="10,15,0,0"/>
     5             <Slider x:Name="RedSlider" Margin="20,0,10,0" Maximum="255" ValueChanged="RedSlider_ValueChanged"/>
     6             <TextBlock Text="Green" FontSize="12" Margin="10,15,0,0"/>
     7             <Slider x:Name="GreenSlider" Margin="20,0,10,0" Maximum="255" ValueChanged="RedSlider_ValueChanged"/>
     8             <TextBlock Text="Blue" FontSize="12" Margin="10,15,0,0"/>
     9             <Slider x:Name="BlueSlider" Margin="20,0,10,0" Maximum="255" ValueChanged="RedSlider_ValueChanged"/>
    10         </StackPanel>
    MainPage.xaml

             (二)在MainPage构造函数中启用Loaded事件

               因为给Slider设置了初始值,所以,在程序初始化前,就不应该绑定ValueChanged事件,故而,可以使用Loaded事件去绑定ValueChanged事件。

              

    .............
    <StackPanel Grid.Row="0" Grid.Column="0" Grid.RowSpan="2" VerticalAlignment="Center">
                <TextBlock Text="Alpha" FontSize="12" Margin="10,15,0,0"/>
                <Slider x:Name="AlphaSlider" Margin="20,0,10,0" Maximum="255" Value="255" />
                <TextBlock Text="Red" FontSize="12" Margin="10,15,0,0"/>
                <Slider x:Name="RedSlider" Margin="20,0,10,0" Maximum="255" Value="255" />
                <TextBlock Text="Green" FontSize="12" Margin="10,15,0,0"/>
                <Slider x:Name="GreenSlider" Margin="20,0,10,0" Maximum="255" Value="102" />
                <TextBlock Text="Blue" FontSize="12" Margin="10,15,0,0"/>
                <Slider x:Name="BlueSlider" Margin="20,0,10,0" Maximum="255" Value="0" />
            </StackPanel>
    
    ...............
    MainPage.xaml

               然后在MainPage.xaml.cs内加上Loaded事件

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Net;
     5 using System.Windows;
     6 using System.Windows.Controls;
     7 using System.Windows.Documents;
     8 using System.Windows.Input;
     9 using System.Windows.Media;
    10 using System.Windows.Media.Animation;
    11 using System.Windows.Shapes;
    12 
    13 namespace SLApplicationEx
    14 {
    15     public partial class MainPage : UserControl
    16     {
    17         public MainPage()
    18         {
    19             InitializeComponent();
    20 
    21             this.Loaded += MainPage_Loaded;//绑定MainPage_Loaded事件
    22         }
    23 
    24         private void RedSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    25         {
    26             Color color = Color.FromArgb((byte)AlphaSlider.Value, (byte)RedSlider.Value, (byte)GreenSlider.Value, (byte)BlueSlider.Value);
    27 
    28             PreviewColor.Fill = new SolidColorBrush(color);
    29             HexColor.Text = color.ToString();
    30         }
    31 
    32         void MainPage_Loaded(object sender, RoutedEventArgs e)
    33         {            
    34             this.RedSlider.ValueChanged += RedSlider_ValueChanged;
    35         }
    36     }
    37 }
    MainPage.xaml.cs

              

  • 相关阅读:
    js的style.width取不到元素的宽度值
    git bush 无法使用箭头进行选择
    exports module.exports export export default之间的关系
    vue前端项目中excel文件下载
    vue -- router路由跳转错误 , NavigationDuplicated
    node url模块
    SSO CAS 单点系列
    离线电脑搭建开发环境
    Shader的语法
    NavMesh名字、层索引、层值之间的转换
  • 原文地址:https://www.cnblogs.com/dowtowne/p/3287279.html
Copyright © 2020-2023  润新知