2010-09-23 9 views
3

Y a-t-il une astuce que l'on sait raconter pour arrêter d'essayer de mettre un startupURI dans mon app.xaml? J'ai googlé mais je n'ai rien vu alors j'ai pensé que je demanderais ici. J'utilise une routine de démarrage et instancie la fenêtre principale moi-même. Chaque mélange de temps en temps aime lancer dans le startupURI = "MainWindow.xaml" quand je le laisse compiler. De temps en temps je vois un message le long des lignes de "Il n'y a pas de scène de démarrage associée à ce projet. Voulez-vous mélanger à bla bla réparer?" Ou quelque chose de ce genre. Je clique sur annuler/pas encore il lance encore un gremlin dans mon code. Interne à mélanger il y a un certain mécanisme pour vérifier cette propriété ou il ne me plaindrait pas via la boîte de dialogue. Alors, comment puis-je juste dire "non merci mélange, je suis bon sans cela?", Lol.empêcher mélange d'ajouter un startupURI à l'application?

C'est assez ennuyeux. J'ouvre le mélange pour faire quelque chose de simple comme utiliser un sélecteur de couleur et l'utiliser pour compiler parce que VS2010 n'est pas ouvert. Mon résultat est deux mainwindows. Mais il ne le fait pas à chaque fois, donc ce n'est pas un comportement reproductible. Le compilateur agit juste au hasard.

edit: J'utilise le mélange 4 mais j'ai vu cela arriver quand j'utilisais le mélange 3 aussi.

+0

Je appuie, il est clairement ennuyeux quand vous avez besoin d'instancier votre fenêtre à partir du code statup !! –

+0

J'espère que quelqu'un de l'équipe de Blend fréquente ce forum et peut inclure un correctif pour ceci ou au moins une option de case à cocher dans la prochaine version de Blend. Cela m'arrive encore au moins 3 fois par semaine. J'essaie de ne pas construire mon projet avec blend mais plusieurs fois je dois le faire pour que mes visuels soient actualisés sur le plan de travail. Lorsque vous le construisez, il prend le fichier .xaml actif (window, page, usercontrol) et le définit comme le démarrage. – TWood

Répondre

0

Ceci est un horrible hack terrible, mais bon, ça marche. Par défaut, StartupUri est null, mais vous ne pouvez pas le définir sur null en utilisant la propriété, donc vous pouvez faire le tour de la propriété si vous aimez vivre sur le bord.

// Dangit blend! Stop inserting a stupid StartupUri  
private void FixStartupUri() 
{ 
    var type = typeof(Application); 
    var startupUri = type.GetField("_startupUri", BindingFlags.Public 
     | BindingFlags.NonPublic 
     | BindingFlags.Instance); 
    startupUri.SetValue(this, null); 
} 

Ajouter à votre classe d'application et l'appeler comme ceci:

protected override void OnStartup(StartupEventArgs e) 
{ 
    FixStartupUri(); 
    base.OnStartup(e); 
    // Do the rest of your startup stuff. 
}