Sta*_*eff 7 .net c# wpf xaml resourcedictionary
在我们的项目中,我们有ResourceDictionary一些看起来像这样的图标:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Canvas x:Key="Icon.Refresh"
x:Shared="False"
Width="32"
Height="32"
Clip="F1 M 0,0L 32,0L 32,32L 0,32L 0,0">
<Path .../>
<Path .../>
<Path .../>
</Canvas>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
该x:Shared="False"属性是必需的,因为当我在多个视图中使用它时,图标将消失.
现在我们想要创建具有相同图标的另一个项目,因此我们决定将它们放在由两个项目引用的库项目中.
但是当我们尝试运行应用程序时,我们总是得到错误:
命名空间" http://schemas.microsoft.com/winfx/2006/xaml "中的共享属性只能在已编译的资源字典中使用."
但我们无法摆脱x:Shared="False"属性,因为据我所知,这是阻止图标消失的唯一方法.
那么我们可以做什么,通过项目参考和不消失的图标在多个项目上共享图标?
Ana*_*aev 10
从这个错误判断,我们可以理解该x:Shared属性只能用于编译 ResourceDictionary.从MSDN x引用:共享属性:
该
ResourceDictionary包含与项目x:Shared必须编制.ResourceDictionary不能在松散的XAML中或用于主题.
编译ResourceDictionary是Build action要设置的Page,因为在这种情况下,它在运行时转换为BAML(二进制应用程序标记语言).创建新建时,通常会默认设置此属性ResourceDictionary.
BAML是简单的XAML,它已被解析,标记化并转换为二进制形式,以提高使用XAML文件的性能.引自Adam Nathan WPF书:
BAML不像微软中间语言(MSIL); 它是一种压缩的声明性格式,加载和解析(并且大小更小)比普通的XAML更快.BAML基本上是XAML编译过程的实现细节.
因此始终建议检查此标志ResourceDictionary,因为如果将其设置Resource,将在内存中存储未打包的XAML版本,这可能会影响整个WPF应用程序的性能.
| 归档时间: |
|
| 查看次数: |
3500 次 |
| 最近记录: |