gpt4 book ai didi

c# - ResourceDictionary.Source 属性中的 MarkupExtension

转载 作者:行者123 更新时间:2023-11-30 16:46:56 25 4
gpt4 key购买 nike

我正在尝试创建一个标记扩展,以简化为 WPF ResourceDictionary 的 Source 属性编写 URI。

问题的最小示例如下:

CS:

public class LocalResourceExtension : MarkupExtension
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return new Uri("Resources.xaml", UriKind.Relative);
}
}

XAML:

<UserControl ...>
<UserControl.Resources>
<ResourceDictionary Source="{mw:LocalResource}" /> <!-- error MC3022 -->
<!-- <ResourceDictionary Source="Resources.xaml" /> --> <!-- Works fine -->
</UserControl.Resources>
<!-- ... -->
</UserControl>

这不会编译并出现以下错误:

error MC3022: All objects added to an IDictionary must have a Key attribute or some other type of key associated with them.

但是,如果我用常量值替换标记扩展(如注释行所示),一切正常。

为什么带有标记扩展的版本不起作用?有解决方法吗?

我正在使用 MSVC 2015。

最佳答案

这对我有用:

public class LocalResource : MarkupExtension
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return new ResourceDictionary() {
Source = new Uri("Resources.xaml", UriKind.Relative)
};
}
}

XAML

<Window.Resources>
<myNamespace:LocalResource />
</Window.Resources>

XAML 编辑器蓝色波浪线 <myNamespace:LocalResource />在设计时,这会杀死设计 View 。所以这只有在您不使用设计 View 时才有效。我不喜欢,但有些人喜欢。

我一直告诉我的女朋友我是自伽利略以来最伟大的天才,她就是不相信我。 Galileo 会找到使设计 View 工作的方法。

更新

解决方案二:

public class LocalResourceDictionary : ResourceDictionary
{
public LocalResourceDictionary()
{
Source = new Uri("Resources.xaml", UriKind.Relative);
}
}

XAML

<Window.Resources>
<myNamespace:LocalResourceDictionary />
</Window.Resources>

这在运行时可以正常工作,消除波浪形,并允许设计人员工作。但是,它在设计模式下无法合并资源文件。仍然不理想。

更新

OP比我聪明。这会做所有事情:

public class LocalResourceDictionary : ResourceDictionary
{
public LocalResourceDictionary()
{
Source = new Uri("pack://application:,,,/MyAssemblyName;component/Resourc‌​es.xaml", UriKind.Absolute);
}
}

关于c# - ResourceDictionary.Source 属性中的 MarkupExtension,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39978844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com