XAML中的外部别名

时间:2010-09-28 17:37:36

标签: c# wpf silverlight xaml assemblies

我目前正在使用一个库,为 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,但我找不到更改此行为的选项。

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

例如:

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

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

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