1

Windows Phone 8 アプリに単純な TextBlock コントロールを追加しようとしましたが、GUI XAML エディターで名前を割り当て、実行時に C# コードで割り当てられた名前を介してコントロールにアクセスしようとすると、「NullReferenceExceptions」が発生します。 "変数が設定されていないためです。問題を PhoneApplicationPage メソッド「FindName」に絞り込みました。

PhoneApplicationPage.FindName("videoName");

ただし、一部のコントロール (GUI エディターで作成) に対するこのような呼び出しは、単純に null を返します。誰かがこの問題を抱えていて、修正を見つけましたか?

よろしく。

InitialiseComponent() メソッドの内容:

 public void InitializeComponent() {
        if (_contentLoaded) {
            return;
        }
        _contentLoaded = true;
        System.Windows.Application.LoadComponent(this, new System.Uri("/Youtube%20Downloader;component/MainPage.xaml", System.UriKind.Relative));
        this.LayoutRoot = ((System.Windows.Controls.Grid)(this.FindName("LayoutRoot")));
        this.TitlePanel = ((System.Windows.Controls.StackPanel)(this.FindName("TitlePanel")));
        this.ContentPanel = ((System.Windows.Controls.Grid)(this.FindName("ContentPanel")));
        this.videoName = ((System.Windows.Controls.TextBlock)(this.FindName("videoName")));
        this.videoImage = ((System.Windows.Controls.Image)(this.FindName("videoImage")));
    }

(videoName および videoImage コントロールは追加されないものです)

XAML コードは次のとおりです (エディターが生成したもの)。

 <phone:PhoneApplicationPage
x:Class="Youtube_Downloader.MainPage"
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"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">

<Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
        <TextBlock Text="YOUTUBE DOWNLOADER" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
    </StackPanel>

    <!--ContentPanel - place additional content here-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <TextBlock x:Name="videoName" Margin="10,10,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Height="56" FontSize="36" FontStyle="Normal"/>
        <Image x:Name="videoImage" HorizontalAlignment="Center" Height="408" Margin="0,72,0,0" VerticalAlignment="Top" Width="446"/>
    </Grid>
</Grid>

4

1 に答える 1

0

私も同じ問題を抱えていました。クリーンプロジェクトはそれを修正します。

于 2014-08-06T13:02:31.750 に答える