Ссылки на изображения из глобальных стилей в Silverlight - PullRequest
0 голосов
/ 14 февраля 2011

У меня есть небольшая проблема, и мне просто интересно, как лучше всего ее обойти:

У меня есть глобальный стиль в app.xaml, который определяет стиль для ряда элементов управления,Он также указывает некоторые изображения, используемые в некоторых других элементах управления.

Область, представляющая интерес в файле app.xaml, выглядит следующим образом:

<!-- Button Icons -->
<BitmapImage x:Key="BackIcon" UriSource="../Images/BackIcon.png" />
<BitmapImage x:Key="PrintIcon" UriSource="../Images/PrintIcon.png" />
<BitmapImage x:Key="ClearIcon" UriSource="../Images/ClearIcon.png" />

<!-- Default Button Style -->
<Style TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid>

                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Pressed">
                                <Storyboard>
                                    <ColorAnimation Duration="00:00:00.00"  To="#999999" Storyboard.TargetName="BackgroundColor" Storyboard.TargetProperty="Color"  />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Disabled">
                                <Storyboard>
                                    <ColorAnimation Duration="00:00:00.00"  To="#bbbbbb" Storyboard.TargetName="BackgroundColor" Storyboard.TargetProperty="Color"  />
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="MouseOver" />
                            <VisualState x:Name="Normal"/>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>

                    <Border Name="BackgroundBorder" BorderThickness="0" CornerRadius="8"> 

                        <Border.Background>
                            <SolidColorBrush x:Name="BackgroundColor" Color="#dddddd" />
                        </Border.Background>

                        <ContentPresenter
                            x:Name="content"
                            Content="{TemplateBinding Content}"
                            VerticalAlignment="Center" HorizontalAlignment="Center" />

                    </Border>
                </Grid>

            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

И структура проекта выглядит следующим образом:

root\
|-- App.xaml
|-- Mainpage.xaml(.cs)
|-- Images\
|   |-- BackIcon.png
|   |-- ClearIcon.png
|   |-- PrintIcon.png
|-- Controls\
    |-- ControlOne.xaml(.cs)
    |-- ControlTwo.xaml(.cs)
    |-- ...

Итак, у меня в ControlOne есть кнопка, содержимое которой содержит изображение, а его источником является {StaticResource ClearIcon}.Это работает нормально, но если бы я поместил кнопку в MainPage.xaml с тем же изображением и статическим ресурсом, это не получилось бы, так как относительное расположение изображения неверно.Теперь это должно быть Images / ClearIcon.png, а не ../Images/ClearIcon.png.

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

Кроме того, я не уверен, что сделал это немного странным образом, но я не хотел помещать изображения непосредственно в шаблон кнопки, как тогданеобходимо создать три разных стиля кнопки для каждой кнопки, когда стиль остается прежним, меняется только изображение!

Заранее большое спасибо!

Andy

1 Ответ

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

Хорошо,

Похоже, я не замечал, как работают URI в silverlight.Читая этот пост: http://weblogs.asp.net/jgalloway/archive/2008/09/11/silverlight-and-relative-uri-s-for-image-and-video-sources.aspx действительно помогли прояснить ситуацию.

Так что, похоже, я собирал свои изображения в сборку и ссылался на них, но когда вы делаете это, относительный путь всегда зависит отрасположение файла xaml, который ссылается на изображение (отсюда и моя проблема).

Мне нужно было вместо этого установить для изображений значение «content» и «copy to output».Это означает, что изображения больше не компилируются в сборку, а копируются в xap в той же структуре папок.Теперь я могу ссылаться на мои изображения с предыдущей косой чертой (то есть '/Images/BackIcon.png'), и относительный путь всегда будет от корня xap независимо от расположения файла xaml.

Кажется, все равно работает хорошо!:)

...