XAML中的外部别名
我目前正在使用一个为Silverlight 3和4实现Menus和ContextMenus的库。 此库在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”使用该类型。
这是一种“重型别名”,但似乎有效。