在wpf.dll
中,我在ResourceDictionary XAML中使用键MorphControl
定义了一个DataTemplate:
<ResourceDictionary>
<DataTemplate x:Key="MorphControl">
<n1:m1 />
</DataTemplate>
</ResourceDictionary>
如果这个wpf.dll
被exe调用(例如,A.exe
),那么我希望上面的FindResource("MorphControl")
返回m1
相关的重新发送。
但是,wpf.dll
可能会被另一个exe(例如B.exe
)调用B.exe
,同一个键被重新定义为使用其他值,即,在B.exe
内,该定义存在:
<ResourceDictionary>
<DataTemplate x:Key="MorphControl">
<n2:m2 />
</DataTemplate>
</ResourceDictionary>
因此,当B.exe
正在调用时,我希望FindResource["MorphControl"]
返回m2
相关资源。
我想对wpf.dll
和A.exe
使用相同的B.exe
。我并不想将MorphControl
定义从wpf.dll
移到A.exe
- 它必须保留在wpf.dll
。
此外,此特定资源键必须始终保持不变,因为在wpf.dll
内,我有DataTemplateSelector
逻辑,我不想触及
如何做到这一点,或者这可能吗?
答案 0 :(得分:0)
这是一种应该有效的非正统方式(我没有尝试过,但基于我做过的其他事情,它应该有效):
在两个单独的文件中为每个exe创建两个ResourceDictionaries。
创建将继承ResourceDictionary
的类,我们将其称为ExeAwareDictionary
。它应该具有类型为ResourceDictionary
的私有字段/属性,您应该覆盖item[object]
属性。
当调用item
属性的getter时,你可以检查它是哪个exe(通过检查当前进程)并从适当的&#34; inner&#34;返回给定键的资源。字典。
您可能还想覆盖其他一些属性,例如Keys
和Values
等。
答案 1 :(得分:0)
我找到了答案(与this answer相同):首先使用<div class="header">
<div class="image">
Image
</div>
<nav class="navigation">
<div class="container">
<div class="bars">
<div class="bar1"></div>
<div class="bar2"></div>
<div class="bar3"></div>
</div>
</div>
</nav>
</div>
ResourceDictionary.MergeDictionaries
定义wpf.dll
,然后按DataTemplate
{{1} }。换句话说:
B.exe