2011-02-24 42 views
4

假設我在XAML中爲我的Silverlight應用程序構建了一些剪貼畫,或者從http://www.xamalot.com下載了它,那麼在我的應用程序中使用它的最佳方式是什麼?在Silverlight中,使用XAML剪貼畫的正確方法是什麼?

是否最好爲每件藝術品創建一個用戶控件?或者有更好的方法可以從資源字典中引用它?

更新:

提供的答案是非常詳細的,而且似乎比我想象中使用此爲一個更大的目的在暗示。我真的只是想知道將XAML剪貼畫用作工具欄上的按鈕(例如)的最佳方式。

回答

2

您可以將XAML剪貼對象作爲XML存儲在數據庫中,然後通過web服務按需下載它們。一旦下載的XAML出現在您的客戶端中,您可以執行如下操作:

string myDownloadedXaml; // downloaded from the server 
Grid myGrid; // the container in your view 
myGrid.Children.Add(XamlReader.Load(myDownloadedXaml)); 
+0

+1正確。如果您不能多次使用它,可能會將生成元素存儲在資源中,因此不需要多次解析它。 – 2011-02-25 09:01:45

+0

您需要將'Load'的結果轉換爲'UIElement'。 – AnthonyWJones 2011-02-25 10:10:56

+0

@Luc:這是個好主意,但要做到這一點,下載的Xaml的結果需要成爲'DataTemplate'。然後可以使用'DataTemplate'的'LoadContent'方法構造圖像的多個實例。 – AnthonyWJones 2011-02-25 10:13:08

6

還有一種更好的方法。

對於剪貼畫的每個片段,您將擁有一個單獨的文件,但不是網站使用的包裝器,直接位於資源字典中的Canvas實例不是他最好的方式。 我們將開始一個ResourceDictionary,但使它看起來像這樣: -

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:YourApplication"> 
    <ControlTemplate TargetType="local:XamlImage" x:Key="SomeImage"> 
     <Viewbox> 
      <Canvas> <!-- this the toplevel canvas from the site or your design --> 
      </Canvas> 
     </Viewbox> 
    </ControlTemplate> 
</ResourceDictionary> 

但這兩樣東西,一是它採用了ControlTemplate包含圖像,這是存儲的更有效的形式,當圖像可能會多次使用,例如當圖像被用作圖標時。其次它使用一個Viewbox,它提供了基於矢量的圖形的承諾,它允許圖像縮放到指定的大小。

您需要爲項目添加新的Templated Custom Control並將其命名爲XamlImage。你不需要做任何事情,它只是需要存在。

暫時讓我們把這個資源字典添加到App.Xaml(那不太可能會保留它)。

現在你可以使用放置在頁面這個圖片: -

<local:XamlImage Template="{StaticResource contactnew}" /> 

現在有幾種方式向前取決於你的真實意圖和卷,情況是以供我多變,以供我詳盡評論。因此,採取兩個極端......

如果你只有幾張圖片,你想從中挑選,那麼你可以簡單地創建更多的文件,並將它們添加到app.xaml的MergedDictionaries。然而最大的不利之處在於所有這些圖像Xamls在應用程序啓動時都會被解析和加載,這可能並不理想。

另一方面,你可能有一個分類Xaml剪貼畫的大型圖書館。在這種情況下,您會希望將它們放置在文件夾結構中,併爲每個文件夾包含一個標準大小的縮略圖png。一個Xml文件充當目錄,然後根據需要加載Xaml文件。在這種情況下,您可以從文件中消除ResourceDictionary並將ControlTemplate作爲根元素,使用XamlReader加載模板,然後將模板緩存到自己的字典中(可能作爲目錄實現的一部分)。

+0

也許我有點緊張:'contactnew'從哪裏來?關於如何將圖像放在頁面中的示例不容易遵循。 – Killnine 2013-06-03 18:57:36

相關問題