C# WPF默认源值

C# WPF默认源值,c#,wpf,xaml,C#,Wpf,Xaml,有没有办法在自定义控件库中保存动态资源的默认值 我已经创建了一个自定义控件库,因此我使用了驻留在Generic.xaml文件中的默认样式。此“默认样式”使用对动态资源标记的引用(请参见示例中的) 如果我在一个新项目中引用我的自定义控件库并在此新项目app.xaml中添加动态资源标记,那么一切都会按预期工作,但如果我不这样做,则值为空 所以我想要一些默认值。换言之: “取{DynamicResource ForegroundColor}的值,如果不存在,则取蓝色。” 我想我只需要在Generi

有没有办法在自定义控件库中保存动态资源的默认值

我已经创建了一个自定义控件库,因此我使用了驻留在Generic.xaml文件中的默认样式。此“默认样式”使用对动态资源标记的引用(请参见示例中的)


如果我在一个新项目中引用我的自定义控件库并在此新项目app.xaml中添加动态资源标记,那么一切都会按预期工作,但如果我不这样做,则值为空

所以我想要一些默认值。换言之:

“取{DynamicResource ForegroundColor}的值,如果不存在,则取蓝色。”

我想我只需要在Generic.xaml(MergedDictionary)中添加默认值,但这不起作用。有人有解决办法吗


我能想到的唯一解决方案是用concret(默认)值(例如蓝色、绿色、黑色)替换dynamicResource标记,并在“消费”应用程序中处理资源(如果您知道我的意思)。

初始化组件后,您可以查看是否找到了所需的资源,如果找不到,则添加默认值

    public MainWindow()
    {
        InitializeComponent();

        try
        {
            var resource = FindResource("ForegroundColor");
        }
        catch (ResourceReferenceKeyNotFoundException)
        {
            Resources.Add("ForegroundColor", new SolidColorBrush(Colors.Red));
        }
    }

你正在处理一个复杂的问题

看到了吗

注意如何定义controldefault样式

放置主题的位置\generic.xaml

您的配色方案包括在哪里(普通的普通配色方案)

检查装配信息

如果所有控件都结构良好,则必须采用自定义控件程序集中的默认颜色

或者只是在app.xaml中包含您的通用from程序集

<ResourceDictionary Source="pack://application:,,,/Client.Core;Component/themes/generic.xaml"/>


Resources跟随可视化树,因此,如果您的控件中有一个资源,则该资源就是所使用的资源,如果该资源不存在,则它会在树的后面进一步查找该资源,这意味着,如果您使用与控制资源相同的条件定义应用程序资源,那么如果您的资源不存在,则将作为默认值使用这些步骤(添加引用和添加资源字典),如果有人不执行这些步骤,则必须执行这些步骤-这是他的问题。您可以将这些内容添加到库的文档(readme.txt)中,但这就是所需的全部内容。如果您真的需要给出提示,那么您可以创建自定义的
MarkupExtension
,而不是
DynamicResource
,在加载/解析xaml时检查资源的可用性,很遗憾,我今天没有时间快速测试此方法。您好,感谢您的回复。我想我会用一些像Sinatr提到的文档来解决这个问题。我考虑一个文件,我们称之为DefaultApp.xaml,我将所有默认的DynamicResources都放在这个文件中。我还将其发布到Buildpath,这样每个人都可以使用此文件并查看他/她需要哪些资源。嗨,好主意,但是如果其他人使用我的库而对这些资源一无所知,那该怎么办呢。也许我可以在自定义库本身中使用您的方法。让我试试:)如果将FrameworkElement作为参数传递给方法,我不明白为什么不能。public void loadresourcefaults(FrameworkElement FrameworkElement)您还可以检查一些著名的组件库,如-但肯定不能通过前面回答的代码。。。
<ResourceDictionary Source="pack://application:,,,/Client.Core;Component/themes/generic.xaml"/>