2013-07-08 83 views
0

我的(第一個)Windows Phone應用程序在代碼從ListPicker中進行選擇並且瀏覽器導航到該選擇時不斷崩潰。它的構建沒有錯誤,但是當我運行並按下按鈕時會崩潰。我是初學者,當涉及到編碼,所以請啞下來你的答案:)Windows Phone應用程序崩潰ListPicker選定項目

繼承人我的代碼:

XAML:

<phone:PhoneApplicationPage 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" 
    x:Class="SecurityCamera.Page1" 
    FontFamily="{StaticResource PhoneFontFamilyNormal}" 
    FontSize="{StaticResource PhoneFontSizeNormal}" 
    Foreground="{StaticResource PhoneForegroundBrush}" 
    SupportedOrientations="Portrait" Orientation="Portrait" 
    mc:Ignorable="d" 
    shell:SystemTray.IsVisible="True"> 

    <phone:PhoneApplicationPage.Resources> 
     <DataTemplate x:Name="ListPickerItemTemplate"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Name}" Margin="10 0 0 0"/> 
      </StackPanel> 
     </DataTemplate> 
     <DataTemplate x:Name="ListPickerFullModeItemTemplate"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Name}" Margin="10 0 0 0"/> 
      </StackPanel> 
     </DataTemplate> 
    </phone:PhoneApplicationPage.Resources> 


    <!--LayoutRoot is the root grid where all page content is placed--> 
    <Grid x:Name="LayoutRoot" Background="Transparent"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <!--TitlePanel contains the name of the application and page title--> 
     <StackPanel Grid.Row="0" Margin="12,17,0,28"> 
      <TextBlock Text="Security Camera Access" Style="{StaticResource PhoneTextNormalStyle}"/>   
      <TextBlock Text="Specify IP" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 
     </StackPanel> 

     <!--ContentPanel - place additional content here--> 
     <Grid x:Name="ContentPanel" Margin="12,138,12,0" Grid.RowSpan="2" Opacity="0.99"> 
      <TextBox x:Name="box1" HorizontalAlignment="Left" Height="70" Margin="31,172,0,0" TextWrapping="Wrap" Text="Http://" VerticalAlignment="Top" Width="400"/> 
      <TextBox x:Name="box2" HorizontalAlignment="Left" Height="70" Margin="31,242,0,0" TextWrapping="Wrap" Text="Http://" VerticalAlignment="Top" Width="400"/> 
      <TextBox x:Name="box3" HorizontalAlignment="Left" Height="70" Margin="31,312,0,0" TextWrapping="Wrap" Text="Http://" VerticalAlignment="Top" Width="400"/> 
      <TextBox x:Name="box4" HorizontalAlignment="Left" Height="70" Margin="31,382,0,0" TextWrapping="Wrap" Text="Http://" VerticalAlignment="Top" Width="400"/> 
      <Button Content="Connect" HorizontalAlignment="Left" Height="80" Margin="84,527,0,0" VerticalAlignment="Top" Width="305" Click="Button_Click_1"/> 
      <Button Content="Save" HorizontalAlignment="Left" Height="80" Margin="84,457,0,0" VerticalAlignment="Top" Width="305" Click="Button_Click_2"/> 
      <TextBlock HorizontalAlignment="Left" Margin="10,119,0,0" TextWrapping="Wrap" Text="Write IP's below to save - Include http:// before all addresses!" VerticalAlignment="Top"/> 
     </Grid> 
     <toolkit:ListPicker x:Name="defaultPicker" SelectionChanged="OnListPickerChanged" ExpansionMode="FullScreenOnly" Header="Saved IP's:" Margin="72,0,72,489" Grid.Row="1"/> 
     <phone:WebBrowser x:Name="webBrowser" HorizontalAlignment="Left" Margin="12,143,0,0" VerticalAlignment="Top" Width="456" Grid.RowSpan="2" Height="615" Opacity="100" Visibility="Visible"/> 
    </Grid> 


</phone:PhoneApplicationPage> 

XAML.CS: 

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Net; 
    using System.Windows; 
    using System.Windows.Controls; 
    using System.Windows.Navigation; 
    using Microsoft.Phone.Controls; 
    using Microsoft.Phone.Shell; 
    using System.Xml; 
    using System.IO.IsolatedStorage; 
    using System.IO; 

    namespace SecurityCamera 
    { 
     public partial class Page1 : PhoneApplicationPage 
     { 
      public Page1() 
      { 
       InitializeComponent(); 
       defaultPicker.ItemsSource = new List<string>() { { box1.Text }, { box2.Text }, { box3.Text }, { box4.Text } }; 
       webBrowser.Visibility = System.Windows.Visibility.Collapsed; 
       // DEBUG MESSAGE - DELETE 
       MessageBox.Show("Visibility set to Collapsed (startup)"); 
      } 

      private void Button_Click_1(object sender, RoutedEventArgs e) 
      { 


    ------------------------THIS IS WHERE IT CRASHES --------------------------    
        //DEBUG MESSAGE - DELETE 
        MessageBox.Show("Button Pressed!"); 
        string selectedItem; 
        selectedItem = (sender as ListPicker).SelectedItem.ToString(); 
        // Do what you want with selectedItem 
        webBrowser.Navigate(new Uri(selectedItem)); 
        //DEBUG MESSAGE - DELETE 
        MessageBox.Show("webBrowser.Navigate Executed...Making Visible"); 
        webBrowser.Visibility = System.Windows.Visibility.Visible; 
        // DEBUG MESSAGE - DELETE 
        MessageBox.Show("webBrowser navigation sent - webBrowser Visibility set to Visible - Button Press"); 

      } 

      private void OnListPickerChanged(object sender, SelectionChangedEventArgs e) 
      { 
       string selectedItem; 
       selectedItem = (sender as ListPicker).SelectedItem.ToString(); 
       // Do what you want with selectedItem 
       // webBrowser.Navigate(new Uri(selectedItem)); 

      } 

      private void Button_Click_2(object sender, RoutedEventArgs e) 
      { 
       defaultPicker.ItemsSource = new List<string>() { { box1.Text }, { box2.Text }, { box3.Text }, { box4.Text } }; 
       // Write Text's into param 
       IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); 

       //create new file 
       using (StreamWriter writeFile = new StreamWriter(new IsolatedStorageFileStream("ip1.txt", FileMode.Create, FileAccess.Write, myIsolatedStorage))) 
       { 
        string someTextData = "{ box1.Text }"; 
        writeFile.WriteLine(someTextData); 
        writeFile.Close(); 
       } 
      } 
     } 
    } 

回答

0

我相信這個轉換失敗:

selectedItem = (sender as ListPicker).SelectedItem.ToString(); 

,而不是嘗試:

selectedItem = defaultPicker.SelectedItem.ToString(); 
+0

是的!就是這樣!非常感謝,我一直盯着這個代碼2個小時,這讓我感到頭痛。 – user2559105

+0

沒問題,請將我的答案標記爲已解決,除非您有任何後續問題:) – EkoostikMartin

相關問題