C# 如何在WPF应用程序中使用composition root时基于分辨率获取视图

C# 如何在WPF应用程序中使用composition root时基于分辨率获取视图,c#,wpf,mvvm,dependency-injection,unity-container,C#,Wpf,Mvvm,Dependency Injection,Unity Container,我有一个场景,目标PC的分辨率有不同的屏幕分辨率。XAML可以在一定程度上处理它,但当分辨率在800*600到1900*1400之间变化时,最好有两个不同的视图/布局(XAML文件) 我的应用程序是一个MVVM应用程序,我倾向于使用Unity作为IOC容器。代码看起来像 public partial class App:Application { protected override void OnStartup(StartupEventArgs e) { bas

我有一个场景,目标PC的分辨率有不同的屏幕分辨率。XAML可以在一定程度上处理它,但当分辨率在800*600到1900*1400之间变化时,最好有两个不同的视图/布局(XAML文件)

我的应用程序是一个MVVM应用程序,我倾向于使用Unity作为IOC容器。代码看起来像

public partial class App:Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        ComposeObjects();
        Application.Current.MainWindow.Show();
    }

    private void ComposeObjects()
    {
        ......
        ......

        Application.Current.MainWindow = container.Resolve<MainWindowView>();
    }
}
公共部分类应用程序:应用程序
{
启动时受保护的覆盖无效(StartupEventArgs e)
{
基础。启动时(e);
ComposeObjects();
Application.Current.MainWindow.Show();
}
私有void ComposeObjects()
{
......
......
Application.Current.MainWindow=container.Resolve();
}
}
是否有一种方法可以根据分辨率解析MainWindowView和其他视图。对于主窗口UI,我会有两个不同布局的视图

此外,MainWindowView XAMLs将包含对许多其他视图的引用,这些视图也可能需要根据屏幕分辨率进行解析


谢谢

您可以使用
Screen.PrimaryScreen.WorkingArea
(在
System.Windows.Forms
命名空间中)。这会将屏幕大小返回为
矩形



从这里开始,或者为应用程序创建多个视图,或者相应地更改控件的大小

我建议使用一个应用程序框架,例如它是为使用MVVM框架组合WPF视图而设计的。一旦有了Prism,您的主窗口将包含一个
区域
,然后您将能够
请求导航到不同的视图,具体取决于屏幕分辨率。