WPF、Simple Injector 和 MaterialDesignThemes 静态资源无效。

7 浏览
0 Comments

WPF、Simple Injector 和 MaterialDesignThemes 静态资源无效。

我有一个使用WPF和Simple Injector和Material Design主题编写的示例应用程序。

这是我的程序文件:

private static Container Bootstrap()
{
    // Create the container as usual.
    var container = new Container();
    container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
    // Register your types, for instance:
    container.Register<IFreewayReviewCreatorDbContext, FreewayReviewCreatorDbContext>(Lifestyle.Scoped);
    container.Register<IUnitOfWorkFactory, UnitOfWorkFactory>(Lifestyle.Transient);
    container.Register<IUnitOfWork, UnitOfWork>(Lifestyle.Scoped);
    container.Register<IReviewBodyBLL, ReviewBodyBLL>(Lifestyle.Transient);
    // Register your windows and view models:
    container.Register();
    container.Register();
    container.Verify();
    return container;
}
private static void RunApplication(Container container)
{
    try
    {
        var app = new App();
        //app.InitializeComponent();
        var mainWindow = container.GetInstance();
        app.Run(mainWindow);
    }
    catch (Exception ex)
    {
        //Log the exception and exit
    }
}

代码中的ViewModels已在Simple Injector中注册。

现在在MainWindow中,我想使用Material Design中的StaticResource。 这是我的代码:

    
        
            

错误出现在这一行:Style=\"{StaticResource MaterialDesignFloatingHintTextBox}\"

System.Windows.Markup.XamlParseException:\'System.Windows.StaticResourceExtension\'上的“提供值”引发了异常。\'行号“44”和行位置“21”。\'异常:找不到名为\'MaterialDesignFloatingHintTextBox\'的资源。 资源名称区分大小写。

\"enter

此网页上有一个带有StaticResource的示例应用程序(我从此应用程序中获取了代码):

https://www.c-sharpcorner.com/article/wpf-application-with-googles-material-design/ 

它有效。 我唯一能看到的区别是我的应用程序具有Simple Injector,而样本应用程序不具有。

两个应用程序的参考资料都相同:

\"enter

admin 更改状态以发布 2023年5月20日
0
0 Comments

假设您像@mm8的答案中给出的那样向类提供,您应该通过在类的构造函数中调用来加载和应用

就像这样:

public partial class App : Application
{
    public App()
    {
        this.InitializeComponent();
    }
}

我在您的问题中看到您已注释掉此行。这可能是遵循Simple Injector文档提供的启动代码后添加Material Design Themes的结果。

但是,当您向App.xaml添加时,此代码是必需的。所以您需要将其添加回来。

0
0 Comments

您应该安装 MaterialDesignThemes NuGet 包,并像 文档 中描述的那样将以下资源字典添加到您的 App.xaml 文件中:



    
        
            
                
                
                
                
            
        
    
 

这与您使用的任何IoC容器的simple injector无关。

您需要将资源导入到您的应用程序中才能使用它们。

0