В Silverlight, как правильно использовать клипарт XAML? - PullRequest
4 голосов
/ 25 февраля 2011

Скажем, я создал какой-то клипарт для своего приложения Silverlight в XAML или скачал его с http://www.xamalot.com,, как лучше всего использовать его в моем приложении?

Лучше всего создатьпользовательский элемент управления для каждого произведения искусства?Или есть лучший способ, которым я могу ссылаться на него из словаря ресурсов?

Обновление:

Предоставленные ответы довольно подробны и, похоже, намекают на использованиеэто для гораздо большей цели, чем я себе представлял.Я действительно просто хотел узнать, как лучше всего использовать клипарт XAML для использования в качестве (скажем) кнопки на панели инструментов.

Ответы [ 2 ]

6 голосов
/ 25 февраля 2011

Есть лучший способ.

У вас будет отдельный файл для каждого фрагмента картинки, но не обертка, которую использует сайт, экземпляр 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}"  />

Теперь есть несколько путей продвижения вперед в зависимости от ваших реальных намерений и объемов, сценарии для меня могут быть исчерпывающими, чтобы комментировать исчерпывающе. Итак, принимая две крайности ...

Если у вас есть только несколько изображений, из которых вы хотите выбрать, вы можете просто создать больше файлов и добавить их в MergedDictionaries файла app.xaml. Однако большим недостатком является то, что все эти образы Xamls анализируются и загружаются при запуске приложения, что может быть нежелательно.

С другой стороны, у вас может быть большая библиотека категоризованных клипартов Xaml. В этом случае вы захотите поместить их в структуру папок и включить миниатюру png стандартного размера для каждого. Файл Xml, который будет действовать как каталог, а затем по требованию загружать файлы Xaml по мере необходимости. В этом случае вы можете исключить ResourceDictionary из файлов и иметь ControlTemplate в качестве корневого элемента, использовать XamlReader для загрузки шаблона, а затем кэшировать шаблон в своем собственном словаре (возможно, как часть реализации каталога).

2 голосов
/ 25 февраля 2011

Вы можете сохранить свои объекты клипартов XAML в базе данных в виде XML, а затем загрузить их по запросу через веб-сервис.Как только загруженный XAML появится в вашем клиенте, вы можете сделать что-то вроде:

string myDownloadedXaml; // downloaded from the server
Grid myGrid; // the container in your view
myGrid.Children.Add(XamlReader.Load(myDownloadedXaml));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...