new*_*man 6 wpf singleton mainwindow
我想让我的MainWindow成为单身人士,因为我想让我的应用程序中的所有其他窗口更容易访问它.但我无法让它运行.这就是我做的.
像往常一样,我将MainWindow承包商public static MainWindow Instance设为私有,并创建了一个返回静态实例的属性.当我在没有任何其他更改的情况下运行它时,我得到"No Source Available"错误.我在网上搜索了一个相关的主题,网址是http://www.netframeworkdev.com/windows-presentation-foundation-wpf/xamlc-singleton-class-80578.shtml.但是,我不能像那里建议那样工作.有人建议在MainWindow.xaml中进行更改
<Window x:Class="TestApp.MainWindow"
Run Code Online (Sandbox Code Playgroud)
至
<Window x:Class="TestApp.MainWindow.Instance"
Run Code Online (Sandbox Code Playgroud)
这看似合乎逻辑.然而,当我这样做时,我得到了大量的编译错误(第一个说明命名空间TestApp已经包含'MainWindow'的定义.)
我在互联网上发现了很多关于如何制作单实例应用的文章.我不是在找这个.我只想让我的MainWindow成为单身人士.我已经多次在WinForm应用程序中完成了它.
mar*_*mnl 14
不确定是不是单身,但你为什么要这样做?你可以简单的使用Application.Current.MainWindow以随时随地获取Application.MainWindow财产在你的应用程序.请参见:http://msdn.microsoft.com/en-us/library/system.windows.application.mainwindow( v = VS.90).aspx.
Window mainWin = Application.Current.MainWindow;
mainWin.Title = "This will be set as the title of the Main Window";
Run Code Online (Sandbox Code Playgroud)
使它单身仍然对我没有意义 - 这如何使它更容易获得?您始终可以在公共静态变量中保存对主窗口的引用 - 这可以在主窗口的构造函数中设置:
public partial class MainWindow : Window
{
public static MainWindow myMainWindow; // ASSUMPTION: only one MainWindow is ever constructed otherwise this will be overwritten by latest such instance
public MainWindow()
{
InitializeComponent();
myMainWindow = this;
}
}
Run Code Online (Sandbox Code Playgroud)
但是后来给出了上面的Application.Current.MainWindow为什么要打扰..
Yog*_*esh 14
要创建MainWindow一个单例,这些是您需要做的步骤:添加MainWindow Instance到MainWindow类...
public static MainWindow Instance { get; private set; }
Run Code Online (Sandbox Code Playgroud)
注意:set accessor是私有的,因此没有其他人可以将其设置为其他任何东西.
添加一个静态构造函数MainWindow并生成构造函数MainWindow private,如下所示...
static MainWindow()
{
Instance = new MainWindow();
}
private MainWindow()
{
InitializeComponent();
}
Run Code Online (Sandbox Code Playgroud)
现在StartupUri="MainWindow.xaml"从App.xaml文件中删除,以便在启动应用程序时不启动默认窗口.在App.xaml.cs中捕获App类的Startup事件,如下所示:
public App()
{
...
Startup += App_Startup;
...
}
void App_Startup(object sender, StartupEventArgs e)
{
TestApp.MainWindow.Instance.Show();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16079 次 |
| 最近记录: |