0

当代码从 ListPicker 中获取选择时,我的(第一个)Windows Phone 应用程序不断崩溃,并且网络浏览器导航到该选择。它构建没有错误,但是当我运行它并按下按钮时崩溃了。我是编码方面的初学者,所以请降低你的答案:)

这是我的代码:

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();
                }
            }
        }
    }
4

1 回答 1

0

我相信这个演员是失败的:

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

而是尝试:

selectedItem = defaultPicker.SelectedItem.ToString();
于 2013-07-08T19:43:26.460 回答