2009-02-06 29 views
5

我讀的Silverlight 2釋放,發表於2008年10月,它有這樣的例子有根canvas標籤:Silverlight根標籤應該是UserControl還是Canvas?

<Canvas xmlns="http://schemas.microsoft.com/client/2007" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Background="Red" 
    Width="500" 
    Height="300"> 
     <Ellipse Width="400"... 

然而,當我創建VS2008一個新的Silverlight應用程序,我得到一個用戶控件根標籤:

<UserControl x:Class="TestFirst.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300"> 
    <Grid x:Name="LayoutRoot" Background="White"... 

我當然可以通過更換用帆布根標籤改變這一點,但後來我也改變後面的代碼從畫布,而不是用戶控件繼承和必須拿出InitializeComponent方法。

  • 正在使用Canvas標記作爲根標準還是本書介紹了創建Silverlight應用程序的替代方法?
  • 使用Canvas而不是UserControl作爲根元素有什麼優勢?
  • 爲什麼本書的第一個示例以與Visual Studio中默認設置不同的方式創建Silverlight應用程序?
  • 有沒有一種方法可以在Visual Studio中默認生成作爲根標記的畫布標記?

回答

4

取消了上下文,使用Canvas作爲XAML文檔中的根目錄可能看起來很奇怪。然而,在本書中,我們在一個名爲SilverlightPad的在線工具中演示了第一個XAML示例時使用。在那種情況下,沒有代碼,只有XAML,因此你不需要改變類文件中的任何東西(因爲沒有)。

問題是,任何XAML元素都可以用作XAML文檔的根。 Visual Studio通過創建UserControl XAML根目錄並將其鏈接到代碼隱藏的UserControl類實際上是更通用方案的特例。我同意大部分時間讀者都會遇到這種情況,但我也相信表明情況可能不同的價值。此外,顯示有時不存在代碼也很重要,即使沒有類的代碼的「幫助」,XAML也是一種具有多種功能的語言。

Silverlight 2 Unleashed使用從幾乎爲零開始並具有(相當陡峭)學習曲線的進展。如果您繼續閱讀,您會看到我們在本書稍後的一段時間開始使用Visual Studio,事情會變得更加熟悉。但是,您會看到您可以使用其他元素作爲根,我認爲這具有教育價值。

如果您有任何其他問題,請隨時張貼在這裏或給我發電子郵件。

乾杯, 洛朗

+0

洛朗您好,我聽取了DeveloperFusion你的播客,所以我知道你的Silverlight的早期採用者,我認爲Canvas標籤可能是從Silverlight的1遺物,十分感謝這個反饋,我採用非傳統方式,通過.hta創意將桌面Silverlight保留下來,保持創意 – 2009-02-07 09:27:44

0

我認爲這本書大概做錯了。實際上,書籍傾向於這樣做。

通常,您的用戶控件應該以UserControl作爲其根。如果您碰巧需要一個Canvas來繪製整個控件的座標位置,則將Canvas作爲UserControl的第一個子元素。 [編輯:]在你的第二個例子中,用Canvas替換Grid - 但是,只有當你真的需要Canvas時!

畫布是一個非常窄範圍的面板;它明確用於座標位置繪圖,並且不應該用於以外的任何東西。如果您正在執行任何類型的輸入控件,請使用網格,DockPanels和/或StackPanels的組合。甚至可能在您的文本框附近使用Canvases製作漂亮的小動畫。 :)

問題是你應該縮小範圍。如果您從Canvas開始,任何事情都會隨着您嘗試處理控件的所有複雜位置而結束。

相關問題