2010-09-28 39 views
1

我目前使用實現菜單ContextMenusSilverlight 3中圖書館和。該庫在System.Windows.Controls命名空間中定義了MenuItem類。外部別名XAML

SL3沒有問題,因爲Silverlight類庫中的其他位置沒有MenuItem類;但現在我需要在Silverlight 4工具包程序集中使用另一個控件,並且該工具包現在在此相同程序集中定義了一個System.Windows.Controls.MenuItem

所以我需要一種方法向編譯器表明我想從我的舊程序集中使用System.Windows.Controls.MenuItem,而不是在工具包4程序集中使用System.Windows.Controls.MenuItem。

該解決方案似乎是「外部別名」的功能。

我可以調整我自己用外部別名編寫的文件,但是如何向代碼生成器指示從XAML生成「.g.i.cs」文件的組件,更確切地說使用哪個別名?

默認情況下,它總是產生在「.g.i.cs」文件System.Windows.Controls.MenuItem變量,當然不別名C#編譯器是無法知道使用哪個組件。

我正在使用VS 2010 Professional,但我一直未能找到改變此行爲的選項。

在此先感謝。

+0

+1有趣的問題。 – AnthonyWJones 2010-09-28 19:08:15

+0

這就是爲什麼我考慮向系統添加任何內容。*命名空間是一種不好的做法。 – Yogesh 2010-09-28 19:26:06

+0

@Yogesh是和否:當您爲缺少的部分提供實現時,比如Silverlight由於其相對較差的庫而常常是這種情況,所以嘗試使它看起來像它的WPF對應部分,即參考實現。這樣,當組件最終被添加到Silverlight時,您不必更改您的代碼。如果工具包提供了所有的菜單實現,而不僅僅是ContextMenus,應該是這種情況。 – Pragmateek 2010-09-28 22:13:03

回答

0

最後我找到了一個解決方法: 我創建了一個包裝菜單庫中類型的庫項目。

例如:

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

我然後引用從我真正的項目這個項目,並可以通過他們的「新」的命名空間「別名」使用類型。

這是一種「重要的別名」,但似乎工作。

0

恐怕唯一的解決方法是翻譯.gics文件的內容並將其移動到.cs文件中,使用別名調整它,刪除partial關鍵字,然後從中刪除x:Class XAML。

上行是設計師仍然會工作。缺點是您需要自己創建任何新的控制字段,並將FindName代碼添加到您現在在.cs中的InitializeComponent副本中。就我個人而言,我非常喜歡這個,有足夠的理由給元素一個名字,而不是需要成爲類中的一個字段(綁定和動畫是其中的兩個)。它煩人的領域是自動創建和寶貴的加載時間致力於發現和分配時,他們從來沒有使用過。