2016-11-14 17 views
1

Template10 UWP templateのVB.NETバージョンを作成しようとしています。コンストラクタVB.NETで共有プロパティの値をMeに設定します

テンプレートはほとんど準備が整いましたが、実行後にShell.xaml.vbファイルにエラーメッセージが表示されます。このクラスのオリジナルのC#コード:

public sealed partial class Shell : Page 
{ 
    public static Shell Instance { get; set; } 
    public static HamburgerMenu HamburgerMenu => Instance.MyHamburgerMenu; 
    Services.SettingsServices.SettingsService _settings; 

    public Shell() 
    { 
     Instance = this; 
     InitializeComponent(); 
     _settings = Services.SettingsServices.SettingsService.Instance; 
    } 

    public Shell(INavigationService navigationService) : this() 
    { 
     SetNavigationService(navigationService); 
    } 

    public void SetNavigationService(INavigationService navigationService) 
    { 
     MyHamburgerMenu.NavigationService = navigationService; 
     HamburgerMenu.RefreshStyles(_settings.AppTheme, true); 
     HamburgerMenu.IsFullScreen = _settings.IsFullScreen; 
     HamburgerMenu.HamburgerButtonVisibility = _settings.ShowHamburgerButton ? Visibility.Visible : Visibility.Collapsed; 
    } 
} 

とVB.NETに変換されたバージョン:

Public Sub New(navigationService As INavigationService) 

と例外が発生:

Partial Public NotInheritable Class Shell 
    Inherits Page 

    Public Shared Property Instance As Shell 
    Public Shared Property HamburgerMenu As HamburgerMenu = Instance.MyHamburgerMenu 
    Public _settings As SampleApp.Services.SettingsServices.SettingsService 

    Public Sub New() 
     Instance = Me 
     InitializeComponent() 
     _settings = SampleApp.Services.SettingsServices.SettingsService.Instance 
    End Sub 

    Public Sub New(navigationService As INavigationService) 
     Me.New() 
     SetNavigationService(navigationService) 
    End Sub 

    Public Sub SetNavigationService(navigationService As INavigationService) 
     MyHamburgerMenu.NavigationService = navigationService 
     HamburgerMenu.RefreshStyles(_settings.AppTheme, True) 
     HamburgerMenu.IsFullScreen = _settings.IsFullScreen 
     HamburgerMenu.HamburgerButtonVisibility = If(_settings.ShowHamburgerButton, Visibility.Visible, Visibility.Collapsed) 
    End Sub 

End Class 

実行のエントリポイントでありますこの行の:

Instance = Me 

例外メッセージ:

タイプ「System.TypeInitializationException」の例外がSampleApp.exeで発生したが、ユーザーコードで処理されなかった

追加情報:「SampleApp.Views.Shell」のタイプ初期化子が投げ例外。

InnerException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

どうすればこのVB.NETクラスを動作させることができますか?ありがとう!

+1

初期化コードはコンストラクタの前で実行されるので、 'Instance.MyHamburgerMenu'はNothingになります – Plutonix

答えて

2

'HamburgerMenu'プロパティの変換が正しくありません。 用途:

Public Shared ReadOnly Property HamburgerMenu() As HamburgerMenu 
    Get 
     Return Instance.MyHamburgerMenu 
    End Get 
End Property 

オリジナルのC#は「HamburgerMenu」の「式ボディ」メンバを使用しています - この機能は、VBでは使用できません。

+0

ありがとう、今は動作しています! – SZL

+0

正解を「回答」とマークすることは丁寧だと考えられます –

関連する問題