Проблемы при загрузке изображений в шаблоне Silverlight ControlTemplate - PullRequest
0 голосов
/ 01 ноября 2010

У меня проблемы с доступом к изображениям в ControlTemplate «Silverlight Templated Control», который я реализовал.Стиль для моего элемента управления, называемый «ControlDragger», следующий:

<!-- ControlDragger Menu button style -->
<Style x:Key="MenuButtonStyle" TargetType="Button">
    <Setter Property="Margin" Value="5,0" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid>
                    <ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<!-- ControlDragger -->
<Style TargetType="core:ControlDragger">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="core:ControlDragger">
                <Border x:Name="ControlDraggerRoot"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Background="{TemplateBinding Background}"
                        HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
                        VerticalAlignment="{TemplateBinding VerticalAlignment}"
                        MinHeight="{TemplateBinding MinHeight}"
                        MinWidth="{TemplateBinding MinWidth}"
                        MaxHeight="{TemplateBinding MaxHeight}"
                        MaxWidth="{TemplateBinding MaxWidth}"
                        Height="{TemplateBinding Height}"
                        Width="{TemplateBinding Width}">
                    <Grid Background="Transparent">
                        <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="#DBDBDB" BorderThickness="1" >
                            <Border.Background>
                                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                                    <GradientStop Color="#F7F7F7" Offset="0" />
                                    <GradientStop Color="#FDFDFD" Offset="1" />
                                </LinearGradientBrush>
                            </Border.Background>
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="36" />
                                    <RowDefinition Height="*" />
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>

                                <!-- Title bar plus drag start -->
                                <Border x:Name="DragStartElement" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="0"
                                        Background="Transparent">
                                    <TextBlock x:Name="Headline" FontSize="14" Margin="14,5,0,0" />
                                </Border>

                                <!-- Clickable icons -->
                                <Border Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Top" Height="26" CornerRadius="13" Margin="0,5,5,0"
                                        BorderThickness="1" BorderBrush="#9EA9B3">
                                    <Border.Background>
                                        <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                                            <GradientStop Color="#EDECEE" Offset="0" />
                                            <GradientStop Color="#FBFBFC" Offset="1" />
                                        </LinearGradientBrush>
                                    </Border.Background>
                                    <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="5,0">
                                        <Button x:Name="AddIcon" Style="{StaticResource MenuButtonStyle}">
                                            <Image Source="Icon_small_add.png" Stretch="None" />
                                            <!--
                                            <TextBlock Text="A" />
                                            -->
                                        </Button>
                                        <Button x:Name="DeleteIcon" Style="{StaticResource MenuButtonStyle}">
                                            <TextBlock Text="D" />
                                            <!--
                                            <Image Source="Icon_small_delete.png" Stretch="None" />
                                            -->
                                        </Button>
                                    </StackPanel>
                                </Border>

                                <!-- Content holder -->
                                <Border Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="14,0,14,9">
                                    <ContentPresenter/>
                                </Border>

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

Этот шаблон содержит кнопки добавления и удаления, которые также изменены.Как только я поместил TextBlock в качестве содержимого любой кнопки, будет отображаться содержимое - TextBlock.Если я заменю TextBlock изображением, то содержимое просто исчезнет.Изображения находятся в той же папке, что и «Generic.xaml», в котором содержится опубликованный XAML.У меня есть другие файлы png в той же папке, и я получаю к ним доступ в других файлах XAML также в той же папке вне ControlTemplate (в UserControl), и они работают.

Вот вещи, которые я пытался решить до сих порэта проблема, которая не работала либо:

1) Копирование изображений в ту же папку, что и реализация, где ControlDragger.cs имеет значение

2) Доступ к кнопкам через их имя в «OnApplyTemplate»"и попробуйте установить изображения с помощью кода

3) Загрузите альтернативный файл png, чтобы убедиться, что используемый файл png не поврежден.

Я также попытался получить доступ к случайному изображению изИнтернет, используя Source = "http: // ...", и это сработало.По причинам отладки я также реализовал событие ImageFailed на изображениях и прикрепил его в «OnApplyTemplate».И действительно, он не загружается, но параметры события не говорят мне, почему он не загружается.У кого-нибудь есть идея, если я что-то пропустил?

Ответы [ 2 ]

2 голосов
/ 02 ноября 2010

Попробуйте это (даже если ваше изображение и стиль в одной сборке):

"/ Assembly; Component / {Relative Path} /Icon_small_add.png"

Assembly - это имя сборкив котором изображение Icon_small_add.png содержит {относительный путь} - путь к папке с вашим изображением

например, "/ControlsLib;Component/Resources/Images/Icon_small_add.png"

0 голосов
/ 02 ноября 2010

Спасибо, что исправили.И это также объясняет, почему у меня были такие проблемы.

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

Таким образом, указание сборки в свойстве Image.Source решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...