2010-10-31 57 views
0

我在實現的「Silverlight模板控件」的ControlTemplate中訪問圖像時遇到問題。我的控制稱爲「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,那麼內容就會消失。這些圖像與包含發佈的XAML的「Generic.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屬性中指定程序集即可解決該問題。