2011-10-31 36 views
0

我是Silverlight的新手,必須編寫幾個SL應用程序來共享許多事情。對於幾個帶有通用控件的Silverlight應用程序,一個好的方法是什麼?

我打算把所有常見的C#代碼放在一個單獨的程序集中,但我對XAML部分感到非常惱火。

我所有的應用程序都會有一些常用的控件:

  • 在頂部的菜單欄,
  • 在頂部的工具欄,
  • 在底部的狀態欄,
  • 面板在左邊。

我在網上搜索了提示,發現XAML代碼不能被繼承。

所以我想到了創建一個包含我的共同控制一個很大的自定義控件,然後將它添加我的所有應用程序的主頁上,但似乎並沒有被正確的方式。

這裏最好的做法是什麼?

讚賞任何幫助,

編輯:我想來到這裏,是我已經與WinForms的那樣。我創建了一個「基礎」WinForm並在其上放置了一些控件。然後,當我創建了繼承這個「基礎」WinForm的新WinForms時,他們擁有了所有的基本控件。我不必使用任何自定義控件。

但我明白,Silverlight不是WinForm,我想要的東西可能不可行這種方式(或根本?)。

回答

2

這取決於你想拿,你是否想使一個資源文件有一些模板等,其複製/鏈接到每個應用程序seperately,或使用包含在一個共同的DLL的東西的路線上。

如果你想做後者,這裏有一種方法。子類ContentControl在其控制模板來定義您共同佈局(你可以做到這一切的XAML),包括在適當的地方結合到其內容:

<ContentControl x:Class="MyLibrary.MyLayoutControl" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ContentControl.Template> 
     <ControlTemplate TargetType="ContentControl"> 
      <!-- this could be a layout grid with various other controls in it --> 
      <Border BorderBrush="Red" BorderThickness="2" CornerRadius="5"> 
       <ContentPresenter Content="{TemplateBinding Content}" /> 
      </Border> 
     </ControlTemplate> 
    </ContentControl.Template> 
</ContentControl> 

然後在你的應用程序根控制使用它:

<UserControl x:Class="InCustomControlTest.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:c="clr-namespace:MyLibrary;assembly=MyLibrary"> 

    <c:MyLayoutControl> 
     <Button Content="Hi I am a button" /> 
    </c:MyLayoutControl> 
</UserControl> 

如果你想做更復雜的事情,你應該做一個自定義控件;儘管在大多數情況下,您可能會爲了各種組件(例如您的狀態欄)而放棄使用一些UserControl來放置在正確的位置。

+0

你幾乎救了我的命。 ; o) 確實,我想要的是一個普通的DLL中的東西,你的解決方案似乎可以做到這一點。 非常感謝! – Rodolphe

0

沒有大問題將XAML資源庫項目。 當引用其他項目的資源緩存時,一定要包含程序集名稱。 此外,模板上還有繼承,您可以在其中放置BasedOn屬性。

編輯:好吧,看一下我們之前工作過的項目,我現在記得我們確實遇到了問題,並將xaml資源複製到每個項目中......我忘了=) 我認爲它工作但在這裏和那裏帶來了一些問題。也許添加xaml文件作爲鏈接?

就我個人而言,我也不會創建到很多控件,而是有大多數東西的模板。如果你有控件,最好只在使用模板的情況下用c#編寫它們,以防止代碼落後的xaml。只是我個人的經歷,可能不是通用的指導方針。

+0

謝謝你的回答bur我不確定我完全理解它。如果我在C#+模板中定義控件,我仍然必須將它們添加到我的所有頁面上,對嗎?我會編輯我的問題,嘗試更好地解釋我想達到的目標。 – Rodolphe

相關問題