XAML中的外部别名

我目前正在使用一个为Silverlight 34实现MenusContextMenus的库。 此库在System.Windows.Controls命名空间中定义MenuItem类。

没有SL3的问题,因为Silverlight类库中的其他地方没有MenuItem类; 但现在我需要在Silverlight 4 Toolkit程序集中使用另一个控件, 工具包现在在同一个程序集中定义了一个System.Windows.Controls.MenuItem

所以我需要一种方法来向编译器表明我想从我的旧程序集中使用System.Windows.Controls.MenuItem而不是工具包4程序集中的那个。

该解决方案似乎是“ 外部别名 ”function。

我可以使用外部别名调整我自己编写的文件,但是如何向代码生成器指示从XAML生成“.gics”文件的文件,哪个汇编,更确切地说是哪些别名?

默认情况下,它总是在“.gics”文件中生成System.Windows.Controls.MenuItem变量,当然没有别名,C#编译器无法知道要使用哪个程序集。

我正在使用VS 2010 Professional,但我无法找到更改此行为的选项。

提前致谢。

我担心唯一的办法就是撕掉.gics文件的内容并将其移动到.cs文件中,用你的别名调整它,删除partial关键字,然后从Xaml中删除x:Class

设计师仍然可以工作。 缺点是您需要自己创建任何新的控制字段,并将FindName代码添加到您现在在.cs中的InitializeComponent副本中。 我个人非常喜欢这个,有很多理由给一个元素一个名字,而不是它需要成为类中的一个字段(绑定和动画是其中两个)。 令人烦恼的是,字段会自动创建,并且在从未使用时会花费大量时间来查找和分配字段。

最后我找到了一个解决方法:我创建了一个库项目,它包装菜单库中的类型。

例如 :

 namespace Alias { public class MenuItem : System.Windows.Controls.MenuItem { } } 

然后我从我的真实项目中引用这个项目,并可以通过它们的“new”命名空间“Alias”使用该类型。

这是一种“重型别名”,但似乎有效。