【问题标题】:RecourceDictionaries and custom convertersRecourceDictionaries 和自定义转换器
【发布时间】:2011-01-11 09:32:11
【问题描述】:

我有一个包含 MainWindow 的 WPF 应用程序,它只显示一个 MainUserControl,它还包含带有合并字典的 App.xaml:

<Application.Resources>
    <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources\Styles.xaml"/>
                <ResourceDictionary Source="Resources\DataTemplates.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
</Application.Resources>

然后我决定在另一个项目中使用 MainUserControl,它应该显示在 ElementHost 中。不幸的是,它不起作用,因为找不到资源字典中的样式和 DataTemplate。我不知道解决它的正确方法,但我决定我可以将代码 ResourceDictionaries 代码移动到 MainUserControl 的资源中:

<UserControl.Resources>
    <ResourceDictionary>
        <!-- the same code --> 
    </ResourceDictionary>
</UserControl.Resources>

它导致我在资源字典中使用的转换器出错 - 无法创建未知类型 '{clrnamespace:MyApplication.Converters;assembly=MyApplication}LengthToStringConverter .我试图通过在我的转换器中再添加一个 ResourceDictionary 来将转换器移到资源字典之外:

        <ResourceDictionary>
            <con:LengthToStringConverter x:Key="textConverter"/>
            <con:DateToTextConverter x:Key="dateConverter"/>
        </ResourceDictionary>

它还导致了 xaml 异常(在“System.Windows.StaticResourceExtension”上提供值引发了异常。)。

所以我正在寻找的是解决在资源字典中找不到的转换器问题的方法,或者解决在另一个项目中使用 MainUserControl 类的问题的另一种方法(它根本找不到资源,也许,有办法指定它们?)。

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    您似乎已经在主项目中定义了资源。这意味着您只能在此项目中使用资源。如果您随后在另一个项目中使用您的 MainUserControl,则该项目不知道主项目及其资源 - 这就是发生错误的原因。

    如果您想在另一个应用程序/项目中重复使用您的资源,您应该将所有资源移动到一个单独的基础程序集/项目中。然后,您可以从两个应用程序/项目中引用此基础项目,以便可以从两个应用程序加载资源。

    【讨论】:

    • 最后,我为转换器/自定义控件、样式和主应用程序创建了单独的程序集,然后让它工作。
    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 2018-04-26
    • 2018-11-07
    • 2013-04-12
    • 2016-04-19
    • 2012-03-15
    • 2021-01-28
    • 1970-01-01
    相关资源
    最近更新 更多