Comment utiliser app.xaml ResourceDictionary avec son propre point d'entrée
Question
Je créé une certaine logique pour l'application SingleInstance et je dois utiliser mon propre point d'entrée (non App.xaml) pour l'application. J'ai quelques styles App.xaml qui est maintenant ne fonctionne pas. Comment puis-je utiliser cette ResourceDictionaries de mon App.xaml pour le projet entier dans ma situation?
Ma classe pour gérer l'application de démarrage
public class SingleInstanceManager : WindowsFormsApplicationBase
{
App app;
public SingleInstanceManager()
{
this.IsSingleInstance = true;
}
protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e)
{
try
{
// First time app is launched
app = new App();
App.Current.Properties["rcID"] = e.CommandLine;
//IntroLibrary.OpenDocumentFromNotify();
app.Run();
return false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
{
// Subsequent launches
base.OnStartupNextInstance(eventArgs);
Intro win = (Intro)app.MainWindow;
if (eventArgs != null)
{
App.Current.Properties["rcID"] = eventArgs.CommandLine[0];
}
IntroLibrary.OpenDocumentFromNotify();
app.Activate();
}
}
et mon propre point d'entrée:
public class EntryPoint
{
[STAThread]
public static void Main(string[] args)
{
SingleInstanceManager manager = new SingleInstanceManager();
manager.Run(args);
}
}
Et mon code app.xaml derrière:
public partial class App : Application
{
protected override void OnStartup(System.Windows.StartupEventArgs e)
{
base.OnStartup(e);
// Create and show the application's main window
Intro window = new Intro();
window.Show();
}
public void Activate()
{
// Reactivate application's main window
this.MainWindow.Activate();
}
}
Et mon App.xaml a un code qui decribe ResourceDictionaries qui ne marche pas le travail. Pourquoi?
La solution
J'ai trouvé la solution à ce problème. Je crée une nouvelle ressource de dictionnaire et de coller tous mes autres Resourse dans ce nouveau dictionnaire:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="themes/ShinyBlue.xaml" />
<ResourceDictionary Source="themes/Anim.xaml" />
<ResourceDictionary Source="themes/Generic.xaml" />
<ResourceDictionary Source="themes/CustomStyles.xaml" />
<ResourceDictionary Source="themes/Resource.xaml" />
<ResourceDictionary Source="themes/CustomWindowChrome.xaml" />
</ResourceDictionary.MergedDictionaries>
et puis vient de modifier un peu mon App.cs
public partial class App : Application
{
protected override void OnStartup(System.Windows.StartupEventArgs e)
{
base.OnStartup(e);
ResourceDictionary rd = new ResourceDictionary() { Source = new Uri("CommonStyle.xaml",UriKind.RelativeOrAbsolute) };
this.Resources = rd;
// Create and show the application's main window
Intro window = new Intro();
window.Show();
}
public void Activate()
{
// Reactivate application's main window
this.MainWindow.Activate();
}
}
J'espère que cette solution aide quelqu'un)))