9

在 WPF 中,可以通过将标记保存在主题文件夹中的单独 XAML 文件中,然后使用 MergedDictionaries 将它们导入 generic.xaml 来为多个用户控件组织 XAML:

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="MyFirstControl.xaml" />
        <ResourceDictionary Source="MySecondControl.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

随着 Silverlight 3 beta 的推出,引入了合并字典支持,似乎可以对 Silverlight 用户控件进行相同的操作。但是,尽管尝试了对合并字典文件的构建操作的所有组合以及 generic.xaml 中源引用的相应语法,但我似乎无法使其正常工作。

有没有其他人尝试过?有谁知道这是否可能,如果可以,我做错了什么?


好的 - 所以经过大量的测试项目,在 WPF 中获取工作示例并将 XAML 和 C# 代码移至 Silverlight 3 并且仍然失败,我完全卸载并重新安装了所有 Silverlight 2 位和所有 Silverlight 3 beta 位和终于搞定了。

我只能假设我以某种方式最终安装了错误的测试版 - 我不知道,但似乎我仍在 Silverlight 2 运行时中运行,尽管显然安装了版本 3 运行时。

感谢 Jared 查看并与 SL3 团队核对……感谢Amy DullardShawn Wildermuth为在同一台机器上运行 Silverlight 2 和 3 生成了说明和批处理文件。

4

3 回答 3

12

我刚刚在用户控件中尝试了以下操作,它起作用了:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ResourcesA.xaml" />
            <ResourceDictionary Source="ResourcesB.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
<StackPanel>
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResAColor}" />
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResBColor}" />
</StackPanel>

但是您特别提到了 generic.xaml。你有什么样的问题?

- 编辑

根据补充意见,我与 SL3 团队进行了交谈,得到了以下答案:

为我工作,使用作为资源编译的 generic.xaml,并使用完整的资源语法。无法在 generic.xaml (31783) 中使用源的相对 URI 存在错误,但非相对形式应该可以正常工作

<ResourceDictionary Source='/SilverlightClassLibrary1;component/CustomControl.xaml'/>

在 generic.xaml 中,并将 generic.xaml 和 CustomControl.xaml 的生成操作修改为 Resource。如果还有问题,请告诉我——如果你得到了复制品,我可以看看。

这有帮助吗?

于 2009-03-27T15:49:54.863 回答
1

如果MySecondControl.xaml使用MyFirstControl.xaml您将它们添加到 generic.xaml 的 ResourceDictionary 的顺序中的资源,则无关紧要。您需要冗余地包含MyFirstControl.xamlMySecondControl.xaml. MySecondControl.xaml应包含:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source='/MyControls;component/Themes/MyFirstControl.xaml'/>
</ResourceDictionary.MergedDictionaries>
<!-- ... Contents of MySecondControl.xaml -->
于 2011-04-14T20:41:37.257 回答
0

我刚刚解决了这个问题。ResourceDictionaries 确实支持 MergedDictionaries,但对于使用 Generic.xaml 的自定义模板化控件,Generic.xaml 不支持 MergedDictionaries。所以有两种选择:(1)你要么把所有的模板都堆到 Generic.xaml 中;要么 或 (2) 创建 YourOwnDictionary.xaml,将所有单独的词典合并到 YourOwnDictionary.xaml,并从用户控件和页面引用 YourOwnDictionary.xaml。这似乎是早期 Silverlight 版本不支持合并字典的功能/错误。

于 2012-01-09T01:08:45.260 回答