繁体   English   中英

您如何声明自己的Main()并导入ResourceDirectory

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM