[英]How do you declare your own Main() and import ResourceDirectory
我需要在WPF应用程序中自定义Main()
方法,因此通过将App.xaml
的“生成操作”更改为“页面”(而不是“ ApplicationDefinition”)来关闭了自动生成主文件的App.xaml
。 但是,我还需要使用ResourceDictionary
,并且如果未将App.xaml
标记为'ApplicationDefinition',则不会导入任何资源(我尝试过此操作,请参见此处 )。
我需要一个自定义Main()
方法,因为应用程序必须是单例,主要是这样:
[STAThread]
public static void Main()
{
MainApplication app = MainApplication.Instance;
app.Run();
}
否,如何自动导入所有资源并同时定义自己的主要资源?
一种解决方案是以编程方式导入它们,例如:
ResourceDictionary dict = new ResourceDictionary();
dict.Source = new Uri("/MyProject;component/MyResourceDictionary.xaml", UriKind.Relative);
Application.Current.Resources.MergedDictionaries.Add(dict);
但是,此解决方案是不可接受的,因为我希望能够将我的应用程序提供给使用Blend的设计人员,并且可能对该程序的背景一无所知 。 因此,不允许他创建新的资源文件,这是不理想的。 还有更好的建议吗?
我强烈建议您将Main()
方法保留为默认值。
您在此处想要实现的目标不需要自定义代码,即使这样做, Main()
方法也不是放置自定义代码的正确位置。
您无需在WPF中为Application
对象创建“单一”属性,因为WPF已经做到了。
您可以通过System.Windows.Application.Current
属性访问WPF中Application
对象的“单例”实例:
因此,如果您将自定义属性放在App
类中,如下所示:
public partial class App : Application
{
public string MyString { get; set; }
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MyString = "I'm a string in the App class";
}
}
然后,您可以在XAML中访问它:
<TextBox Text="{Binding MyString, Source={x:Static Application.Current}}"/>
或者,如果您需要访问MainWindow
的实例,则可以执行以下操作:
<TextBox Text="{Binding Title,
Source={x:Static Application.Current.MainWindow}}"/>
要么
<TextBox Text="{Binding DataContext.MyString,
Source={x:Static Application.Current.MainWindow}}"/>
用于MainWindow的ViewModel中的属性。
如果您已正确地为问题加上标题,则类似如何创建单例WPF应用程序? ,那么我确定您现在会收到几封答复。 但是,幸运的是,我阅读了评论并看到您的评论指出了这一要求。
在线上有许多教程显示如何实现您的实际需求。 例如,您可以看一下Sanity Free Coding网站上使用Mutex
类的C#.NET单一实例应用程序页面。 如果那个人不适合您,只需搜索其他人,直到找到一个适合您的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.