在Silverlight中,使用XAML clipart的正确方法是什么?

在Silverlight中,使用XAML clipart的正确方法是什么?,silverlight,xaml,Silverlight,Xaml,假设我已经在XAML中为我的Silverlight应用程序构建了一些clipart,或者从下载了它,那么在我的应用程序中使用它的最佳方式是什么 是否最好为每件艺术品创建一个用户控件?还是有更好的方法可以从资源字典中引用它 更新: 提供的答案非常详细,似乎暗示着要将其用于比我想象的更大的目的。我真的只是想知道使用XAML clipart作为(比如)工具栏上的按钮的最佳方式。您可以将XAML clipart对象以XML形式存储在数据库中,然后通过Web服务按需下载它们。下载的XAML出现在客户端后,

假设我已经在XAML中为我的Silverlight应用程序构建了一些clipart,或者从下载了它,那么在我的应用程序中使用它的最佳方式是什么

是否最好为每件艺术品创建一个用户控件?还是有更好的方法可以从资源字典中引用它

更新:


提供的答案非常详细,似乎暗示着要将其用于比我想象的更大的目的。我真的只是想知道使用XAML clipart作为(比如)工具栏上的按钮的最佳方式。

您可以将XAML clipart对象以XML形式存储在数据库中,然后通过Web服务按需下载它们。下载的XAML出现在客户端后,您可以执行以下操作:

string myDownloadedXaml; // downloaded from the server
Grid myGrid; // the container in your view
myGrid.Children.Add(XamlReader.Load(myDownloadedXaml));
有更好的办法

每个剪贴画都有一个单独的文件,但没有站点使用的包装器,直接在资源字典中有一个画布实例,这不是最好的方法。 我们将从一个
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>
现在,根据您的真实意图和数量,有几种前进的方式,场景会有所不同,我可以对此进行详尽的评论。所以采取两个极端

如果您只想从中挑选一些图像,那么您可以简单地创建更多文件并将它们添加到app.xaml的
MergedDictionaries
。然而,最大的缺点是,所有这些映像XAML都是在应用程序启动时解析和加载的,这可能是不可取的


另一方面,您可能有一个分类Xaml clipart的大型库。在这种情况下,您需要将它们放置在文件夹结构中,并为每个文件夹包含一个标准大小的缩略图png。Xml文件用作目录,然后根据需要加载Xaml文件。在这种情况下,您可以从文件中删除
ResourceDictionary
,并将
ControlTemplate
作为根元素,使用
XamlReader
加载模板,然后将模板缓存在您自己的字典中(可能是目录实现的一部分)。

+1正确。当您无法多次使用generader元素时,可以将其存储在资源中,这样它就不需要多次解析。您需要将
Load
的结果强制转换为
UIElement
@Luc:这是一个好主意,但要做到这一点,下载的Xaml的结果需要是
DataTemplate
。然后可以使用
DataTemplate
LoadContent
方法构建图像的多个实例?您关于如何在页面中放置图像的示例并不容易理解。
<local:XamlImage Template="{StaticResource contactnew}"  />