C# 是否可以移动<;窗口资源>;要另存一个文件吗?

C# 是否可以移动<;窗口资源>;要另存一个文件吗?,c#,wpf,xaml,resources,mainwindow,C#,Wpf,Xaml,Resources,Mainwindow,我在窗口资源中有两个动画作为故事板 有没有办法将它们移动到一个单独的文件中,并且仍然可以访问它们? 如果是,请告诉我如何操作。 为了清楚起见,我想将以下生成的代码从MainWindow.xaml文件移到一个单独的文件中,以便保持代码整洁有序: 一种解决方案是将它们作为资源放在App.xaml中。这样,您将拥有全球可访问的资源 另一种方法(我更喜欢)是在单独的资源字典中定义与资源相关的内容,并在应用程序启动事件时将其加载到代码中。在选择加载哪些资源文件时,它给了我更多的灵活性 一些示例代码:

我在窗口资源中有两个动画作为故事板

有没有办法将它们移动到一个单独的文件中,并且仍然可以访问它们? 如果是,请告诉我如何操作。

为了清楚起见,我想将以下生成的代码从MainWindow.xaml文件移到一个单独的文件中,以便保持代码整洁有序:


一种解决方案是将它们作为资源放在App.xaml中。这样,您将拥有全球可访问的资源

另一种方法(我更喜欢)是在单独的资源字典中定义与资源相关的内容,并在应用程序启动事件时将其加载到代码中。在选择加载哪些资源文件时,它给了我更多的灵活性

一些示例代码:

        var basicUriString   = String.Format("/{0}.Base;component/Basic.xaml", skinName);

        try
        {
            var uri = new Uri(basicUriString, UriKind.RelativeOrAbsolute);
            newDict = new ResourceDictionary { Source = uri };
            if (!Application.Current.Resources.MergedDictionaries.Any(dic => dic.Source.OriginalString.Contains(basicUriString)))
            {
                Application.Current.Resources.MergedDictionaries.Add(newDict);
            }
        }
        catch (Exception e)
        {
            // log error
        }

此方法将资源字典添加到应用程序资源中,假设存在名为{skinName}.Base的程序集,我将其作为方法参数传入。

您可以将此代码放入单独的资源字典中,无论是在同一程序集中还是在另一个程序集中。然后,您只需将该词典添加到Windows资源的合并词典集合中:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Folder/YourResourceDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>


下面是打包URI的示例。

好的,将这两个动画添加到资源字典并在应用程序启动时加载听起来不错。你能为我提供一些步骤吗?比如,我要做什么才能做到这一点?剪切代码,创建一个新文件,粘贴到那里,或者?我创建了一个新的资源字典(这是一个带有ResourceDictionary标记的xaml文件)并将代码粘贴到其中,但我遇到了几个错误。我还在调查。问题是我以前从未这样做过。我不知道如何正确地将问题中的代码移动到资源字典中。我已经创建了一个新的资源字典文件并粘贴了代码,但是我得到了几个
不明确的引用
错误…更新:好的,似乎我通过删除
标记摆脱了错误。
<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Folder/YourResourceDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>