2009-08-02 61 views
0

作爲一個ASP.Net開發人員,我熟悉母版頁作爲網頁模板。 Silverlight中有沒有與ASP.Net中的Master Pages等價的機制?silverlight中的控制模板

因爲我不想重複自己創造一個像類似的控制:

ControlA

<UserControl> 
    <Grid> 
    <Button Click="ClickMe" /> 
    <Button Click="CancelMe" /> 
    <TextBlock /> 
    <StackPanel> 
     <!-- content start here --> 
     <Rectangle /> 
     <!-- content end here --> 
    </StackPanel> 
    <Grid> 
</UserControl> 

ControlB

<UserControl> 
    <Grid> 
    <Button Click="ClickMe" /> 
    <Button Click="CancelMe" /> 
    <TextBlock /> 
    <StackPanel> 
     <!-- content start here --> 
     <Canvas /> 
     <!-- content end here --> 
    </StackPanel> 
    <Grid> 
</UserControl> 

回答

1

對於這種特定類型的模板,您可以使用ItemsControlItemsControl是一種Control,可以包含多個項目,例如字符串,對象或其他元素。如下圖所示轉換您的XAML。請記住在您的代碼隱藏文件中從ItemsControl而不是UserControl中派生出您的班級。

<ItemsControl> 
    <ItemsControl.Template> 
    <ControlTemplate TargetType="ItemsControl"> 
     <Grid> 
     <Button Click="ClickMe"/> 
     <Button Click="CancelMe"/> 
     <TextBlock/> 
     <ItemsPresenter/> 
     </StackPanel> 
    </ControlTemplate> 
    </ItemsControl.Template> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <StackPanel/> 
    </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

假設您的新班級名爲MasterPageControl。您可以使用像這樣的控件:

<local:MasterPageControl> 
    ... 
    <Rectangle/> 
    <Canvas/> 
    ... 
</local:MasterPageControl> 
2

沒有等價的,因爲這個概念並不適用到Silverlight - 就像它不適用於桌面應用程序一樣。

Silverlight應用程序的外觀是通過控件層次結構實現的。佈局可以隨時修改,並且更新將反映在下一個渲染過程中(這實際上是對Windows窗體的改進)。

要正確實現您的示例,您只需創建一個UserControl,其中包含ControlA和ControlB共有的所有內容,並根據需要修改其StackPanel的內容 - 可能在其構造函數中,或者可能響應由其他控件。這完全取決於你何時以及多久這樣做。

一旦掌握了它,您會發現使用Silverlight創建動態和可用界面比使用傳統Web技術的任何組合更容易。