如果从不同的exe

时间:2017-07-28 10:44:49

标签: c# wpf xaml datatemplate resourcedictionary

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.dllA.exe使用相同的B.exe。我并不想将MorphControl定义从wpf.dll移到A.exe - 它必须保留在wpf.dll

此外,此特定资源键必须始终保持不变,因为在wpf.dll内,我有DataTemplateSelector逻辑,我不想触及

如何做到这一点,或者这可能吗?

2 个答案:

答案 0 :(得分:0)

这是一种应该有效的非正统方式(我没有尝试过,但基于我做过的其他事情,它应该有效):

在两个单独的文件中为每个exe创建两个ResourceDictionaries。 创建将继承ResourceDictionary的类,我们将其称为ExeAwareDictionary。它应该具有类型为ResourceDictionary的私有字段/属性,您应该覆盖item[object]属性。 当调用item属性的getter时,你可以检查它是哪个exe(通过检查当前进程)并从适当的&#34; inner&#34;返回给定键的资源。字典。

您可能还想覆盖其他一些属性,例如KeysValues等。

答案 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