2016-11-14 2 views
1

J'essaie de créer une version VB.NET du Template10 UWP template.Définir la valeur de propriété partagée à Me dans le constructeur VB.NET

Le modèle est presque prêt, mais après l'exécution, je reçois un message d'erreur dans le fichier Shell.xaml.vb. Le code d'origine C# de cette classe:

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; 
    } 
} 

et la version convertie en VB.NET:

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 

Le point d'entrée de l'exécution est:

Public Sub New(navigationService As INavigationService) 

et l'exception se produit à cette ligne:

Instance = Me 

Le message d'exception:

Une exception de type 'System.TypeInitializationException' a eu lieu en SampleApp.exe mais n'a pas été traitée dans le code utilisateur

Informations complémentaires: Le type initialiseur pour 'SampleApp.Views.Shell' a jeté un exception.

InnerException: référence d'objet non définie sur une instance d'un objet.

Comment puis-je faire fonctionner cette classe VB.NET? Merci!

+1

Le code d'initialisation sera exécuté avant le constructeur afin que 'Instance.MyHamburgerMenu' sera Rien – Plutonix

Répondre

2

La conversion de la propriété 'HamburgerMenu' est incorrecte. Utilisation:

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

L'original C# utilise un membre 'expression valides' pour 'HamburgerMenu' - cette fonction est disponible en VB.

+0

Merci, maintenant son travail! – SZL

+0

Il est considéré comme poli de marquer la réponse correcte comme «Réponse» –