WPF - 在App.xaml的Build Action = Page时,在设计时访问资源

时间:2009-05-13 00:15:42

标签: wpf resources

我将App.xaml的构建操作更改为“页面”,因此我可以处理启动画面并确保我的应用程序仅作为单个实例运行(具有我自己的入口点)。 它在运行时工作正常,但在设计时,应用程序无法再查看我的资源。资源位于同一项目中的单独xaml文件中。 如何让我的应用再次在设计时看到资源?

由于

3 个答案:

答案 0 :(得分:6)

将您的资源分解为一个单独的资源字典,然后将它们拉入App.xaml,如下所示:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MasterResources.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

您可以根据需要以这种方式添加多个资源词典。

您还需要在UserControls(以及使用资源引用UserControls的Windows)中执行相同的操作:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MasterResources.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

有关此主题的更多信息,请参阅http://ithoughthecamewithyou.com/post/Merging-Resource-Dictionaries-for-fun-and-profit.aspx

答案 1 :(得分:3)

确保将InitializeComponent()作为应用程序构造函数的第一行:

public App()
{
    // This is the method generated by VisualStudio that initializes
    // the application from associated XAML file
    InitializeComponent();

    // Do everything else
}

答案 2 :(得分:0)

如果我理解你是正确的,那么你是在app.xaml中加载应用程序范围的资源吗?在这种情况下,你可以这样做:


App app = new App();
//Get assembly name is your own method
string assemblyName = GetAssemblyName(Assembly.GetExecutingAssembly());

Uri resourceLocater = new Uri("/" + assemblyName + ";component/app.xaml", UriKind.Relative);
System.Windows.Application.LoadComponent(app, resourceLocater);
MainWindow mainWindow = new MainWindow();
app.Run(mainWindow);

然后将加载您的资源

/丹尼尔