我目前正在使用一个库,为 Silverlight 3 和 4 实施菜单和 ContextMenus 。此库在 System.Windows.Controls命名空间中定义 MenuItem 类。
SL3没有问题,因为Silverlight类库中的其他地方没有MenuItem类;但现在我需要在 Silverlight 4 Toolkit程序集中使用另一个控件,工具包现在在同一个程序集中定义了 System.Windows.Controls.MenuItem !
所以我需要一种方法来向编译器表明我想要使用旧程序集中的System.Windows.Controls.MenuItem而不是工具包4程序集中的那个。
解决方案似乎是“外部别名”功能。
我可以使用外部别名调整我自己编写的文件,但如何向代码生成器指示,从XAML生成“.gics”文件的那个文件,哪个汇编,更确切地说是哪些别名?
默认情况下,它总是在“.gics”文件中生成 System.Windows.Controls.MenuItem 变量,当然没有别名,C#编译器无法知道要使用哪个程序集。 / p>
我正在使用VS 2010 Professional,但我找不到更改此行为的选项。
提前致谢。
答案 0 :(得分:0)
我担心解决这个问题的唯一方法就是撕掉.gics文件的内容并将其移动到.cs文件中,用你的别名调整它,删除partial
关键字,然后删除来自Xaml的x:Class
。
上行是设计师仍然会工作。缺点是您需要自己创建任何新的控制字段,并将FindName
代码添加到您现在在.cs中的InitializeComponent
副本中。我个人非常喜欢这个,有很多理由给一个元素一个名称,而不是它需要成为类中的一个字段(绑定和动画是其中两个)。令人烦恼的是,字段会自动创建,并且在从未使用时会花费大量时间来查找和分配字段。
答案 1 :(得分:0)
最后我找到了一个解决方法: 我已经创建了一个库项目,它包装了菜单库中的类型。
例如:
namespace Alias
{
public class MenuItem : System.Windows.Controls.MenuItem
{
}
}
然后我从我的真实项目中引用这个项目,并可以通过“new”命名空间“Alias”使用该类型。
这是一种“重型别名”,但似乎有效。