Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用绑定绑定resourcedirectory源属性 脚本_C#_.net_Wpf_Xaml_Data Binding - Fatal编程技术网

C# 如何使用绑定绑定resourcedirectory源属性 脚本

C# 如何使用绑定绑定resourcedirectory源属性 脚本,c#,.net,wpf,xaml,data-binding,C#,.net,Wpf,Xaml,Data Binding,我的window.xaml中有以下代码集: 因此,虽然我已经在window.xaml中进一步定义了xmlns:UICore,但我不想使用/MD.UI.Core;component/Themes/Generic.xaml。我想做的是,通过使用xmlns,我想绑定ResourceDirectory.Source属性,类似于: <ResourceDictionary Source="{DynamicResource }"></ResourceDictionary> 或者使用X

我的window.xaml中有以下代码集:

因此,虽然我已经在window.xaml中进一步定义了xmlns:UICore,但我不想使用/MD.UI.Core;component/Themes/Generic.xaml。我想做的是,通过使用xmlns,我想绑定ResourceDirectory.Source属性,类似于:

<ResourceDictionary Source="{DynamicResource }"></ResourceDictionary>
或者使用XAML标记的绑定表达式

我不知道。如何定义上述内容?
你能帮我吗?

我的理解是,你要做的是能够动态地从资源字典中选择一个主题。我通常在C语言中这样做。例如,让我们假设我们有两个主题。第一个嵌入到当前程序集中,第二个来自外部程序集中。让我们从External.dll中将它们命名为Internal.xaml和External.xaml。现在我们可以编写以下方法:

private static void SetStyle(bool useInternal)
{
    var res = Application.Current.Resources;
    res.MergedDictionaries.Clear();

    if (useInternal)
        res.MergedDictionaries.Add(new ResourceDictionary()
        {
            Source = new Uri("pack://application:,,,/Internal.xaml")
        });
    else
        res.MergedDictionaries.Add(new ResourceDictionary()
        {
            Source = new Uri("pack://application:,,,/External;component/External.xaml")
        });
}
由于假定MergedDictionaries集合中只能有一个项,因此简化了此方法。然而,它显示了一个想法。实际上,您可以相应地向MergedDictionaries集合添加/删除资源


同样值得指出的是,上面的SetStyle方法使用全局资源字典。如果需要,您可以对本地词典执行相同的操作,例如对特定窗口甚至控件执行此操作。

简单地将URL放在源属性中如何?没什么特别的,只是URL本身。你知道@MikeEason ResourceDirectory的源是一个依赖属性吗?它的用途是什么?我不知道你到底是什么意思。但Source是System.Uri类型的依赖属性,所以您应该能够这样做:Source=http://schemas.MasterData.io/Core/.How 要在此处指定/Themes/Generic.xaml。。你能把你的想法作为答案吗。。因此,我们可以更详细地讨论它。我不确定我是否理解您在这里试图实现的目标-您不想一次引用上述词典xmlns:UICore=。。。是否声明映射?如果是这样,为什么不删除资源字典引用呢?命名空间映射不是运行时属性-需要在解析之前定义XAML中引用的每个命名空间映射前缀,否则XAML无效此规则从XML继承。也许我误解了你的目标-如果是这样,你能澄清一下吗?请看一下我的编辑部分。。我很感激你的努力但我的问题与此无关
<ResourceDictionary Source="{DynamicResource }"></ResourceDictionary>
<ResourceDictionary Source="{DynamicResource UICore:component/Themes/Generic.xaml}"></ResourceDictionary>
private static void SetStyle(bool useInternal)
{
    var res = Application.Current.Resources;
    res.MergedDictionaries.Clear();

    if (useInternal)
        res.MergedDictionaries.Add(new ResourceDictionary()
        {
            Source = new Uri("pack://application:,,,/Internal.xaml")
        });
    else
        res.MergedDictionaries.Add(new ResourceDictionary()
        {
            Source = new Uri("pack://application:,,,/External;component/External.xaml")
        });
}