2010-10-31 5 views
0

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

<!-- 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

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

"/ Ассамблеи; Компонент/{относительный путь} /Icon_small_add.png"

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

eg "/ControlsLib;Component/Resources/Images/Icon_small_add.png"

0

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

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

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

Смежные вопросы