当mainWindow为null时如何设置DataContext?

时间:2018-03-17 17:23:53

标签: c# wpf

class Program : Application
{
    [STAThread]
    public static void Main()
    {

        Program app = new Program();
        app.StartupUri = new Uri("../../LoginWindow.xaml", UriKind.Relative);

       //app.MainWindow is null
        app.Run();

    }

    virtual protected void OnStartUp(StartupEventArgs e)
    {
        MessageBox.Show("Start up");

    }
}

//应用程序的MainWindow为null,那么如何在void Main()中将DataContext设置为LoginWindow(是一个UserControl) //由于某种原因,应该没有窗口类,我想直接启动UserControl

2 个答案:

答案 0 :(得分:0)

这不是WPF application starts进入的正确方法。我不知道为什么你需要创建一个Main方法,因为你的应用程序是Windows.Form。无论如何,你可以做你需要看this blog

基本上你

  

需要从" 应用程序定义"更改应用程序的构建操作到" Page ",创建一个调用" InitializeComponent "的构造函数,并通过最终调用一个来编写您的Main()应用程序的" 运行"方法重载

然后您的代码将变为

class Program : Application
{
    public Program()
    {
        InitializeComponent();
    }

    [STAThread]
    public static void Main()
    {
        LoginWindow loginWindow = new LoginWindow();
        /* Here you can set loginWindow's DataContext */ 
        Program app = new Program();
        app.Run(window);
    }
}

答案 1 :(得分:0)

更简单的方法是订阅应用程序的Startup事件:

的App.xaml:

<Application x:Class="MyApp"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Startup="App_Startup" />

App.xaml.cs:

public partial class App
{
    private void App_Startup(object sender, StartupEventArgs e)
    {
        var view = new MainView { DataContext = new MainVM() };
        view.Show();
    }
}