如何在Bootstrapper应用程序中添加ResourceDictionary

时间:2016-09-23 07:04:46

标签: c# wpf bootstrapper

在我的Bootstrapper应用程序中,我使用自己的消息框。此消息框需要在dll中显示的样式。对于其他观看次数(xaml),会将其添加为ResourceDictionary,如:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MyApp;component/MyStyle.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

或者通常任何C#应用程序都有app.xaml,其中可以添加此样式并且它可以正常工作。对于Bootstrapper,我无法添加app.xaml或提供此ResourceDictionary。任何指针?

1 个答案:

答案 0 :(得分:0)

在能够将资源字典添加到应用程序资源之前,您需要做两件事。由于本机Bootstrapper托管我们的WPF窗口,因此没有自动设置应用程序。只需创建System.Windows.Application的实例即可完成此操作。其次,你必须设置Application.ResourceAssembly。完成这两个步骤后,您可以使用Application.Current.Resources访问应用程序资源。为了完整性,请使用完整的代码示例:

public class CustomBootstrapper : BootstrapperApplication
{
    protected override void Run()
    {
        if (Application.Current == null)
        {
            new Application();
        }
        if (Application.ResourceAssembly == null)
        {
            var assembly = typeof(CustomBootstrapper).Assembly;
            Application.ResourceAssembly = assembly;
        }
        var myStyle = (ResourceDictionary)Application.LoadComponent(new Uri("/styling/MyStyle.xaml", UriKind.Relative));
        Application.Current.Resources.MergedDictionaries.Add(myStyle);
        var view = new MainWindow();
        view.Show();
    }
}

我希望这能回答你的问题