Иконки XAML - как использовать?

У меня есть файлы векторной графики в формате XAML, и я хотел бы использовать их в качестве значков / кнопок в приложении Silverlight. Подход, который я бы предпочел, - это использовать элемент управления Image и установить его свойство source в файл .xaml, так же, как я могу использовать обычное растровое изображение.

Но это не так просто, и я попытался включить их как ControlTemplates в словарь ресурсов, и я даже попытался создать настраиваемый элемент управления, который бы загружал Xaml динамически, но я не был очень доволен результатом, так как мне нужно было обернуть их в Элементы управления ViewBox для обеспечения динамического размера и т. Д.

Итак, мои вопросы: есть ли у кого-нибудь лучшие практические советы, как лучше всего использовать мои значки xaml? При необходимости я мог скопировать и вставить xaml, но мне такой подход не нравится.

Заранее спасибо.


person jmw    schedule 12.01.2011    source источник


Ответы (1)


JWendel,

Вы должны опубликовать несколько примеров своих значков XAML для пояснения, но любой элемент управления содержимым, например Button и ContentControl, имеет оба элемента Content и свойства ContentTemplate. Общий пример ContentTemplate показан ниже:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
>
    <UserControl.Resources>
        <Style x:Key="MyTriangleIcon" TargetType="ContentControl">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <Grid>
                            <Polygon Fill="Black" Stroke="Black">
                                <Polygon.Points>
                                    <Point X="0" Y="100"/>
                                    <Point X="100" Y="0"/>
                                    <Point X="100" Y="100"/>
                                </Polygon.Points>
                            </Polygon>
                            <Polygon Fill="Red" Stroke="Red">
                                <Polygon.Points>
                                    <Point X="100" Y="0"/>
                                    <Point X="0" Y="100"/>
                                    <Point X="0" Y="0"/>
                                </Polygon.Points>
                            </Polygon>
                        </Grid>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>

    <StackPanel Background="White">
        <Button Width="120" Height="120" Style="{StaticResource MyTriangleIcon}" />
        <Button Width="120" Height="120" Style="{StaticResource MyTriangleIcon}" />
    </StackPanel>

</UserControl>

Вы можете вставить приведенный выше контент в мой XamlViewer, чтобы быстро увидеть результаты.

Удачи,
Джим МакКарди

person Jim McCurdy    schedule 01.02.2011
comment
Спасибо за твою помощь, Джим. Но это не решает проблему дублирования моего XAML для всех элементов управления, использующих изображение, или, по крайней мере, создания одного стиля / шаблона для каждого типа элемента управления. Я хотел бы найти способ, который позволил бы мне работать с файлами .xaml так же, как я работаю с файлами .png или .jpeg. Это не имеет большого значения, но я чувствовал, что способ их использования с копированием и вставкой был недостаточно удовлетворительным, и вы правы в том, что я мог использовать их со свойствами содержимого. - person jmw; 02.02.2011
comment
Чтобы избежать дублирования, просто создайте экземпляры своих значков XAML в виде шаблонов ресурсов ContentControl либо на уровне приложения (Application.Resources), либо на уровне UserControls (UserControl.Resources). Я изменил свой XAML выше, чтобы показать, как это можно сделать и как он позволяет повторно использовать ваш XAML. - person Jim McCurdy; 02.02.2011