2012-05-23 7 views
6

Deseo utilizar ImageBrush en XAML para aplicar un fondo a Grid.Imagen de fondo de cuadrícula con ImageBrush

He dado el pincel a x:Key y quiero consultarlo en mi cuadrícula.

Lamentablemente, no aparece la imagen como fondo.

<Window.Resources> 
    <ImageBrush ImageSource="/MAQButtonTest;component/images/bird_text_bg.jpg" x:Key="BackgroundSponge" /> 
    <Style TargetType="TextBlock"> 
     <Setter Property="OverridesDefaultStyle" Value="True"/> 
    </Style> 
    <ControlTemplate TargetType="Button" x:Key="ButtonTemplate"> 
     <Grid Width="444" ShowGridLines="False" SnapsToDevicePixels="True" Background="{DynamicResource BackgroundSponge}"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="51" /> 
       <RowDefinition Height="36" /> 
      </Grid.RowDefinitions> 
      <Grid Grid.Row="0" Background="#286c97"> 

      </Grid> 
      <Grid Grid.Row="1" Background="#5898c0"> 
       <ContentPresenter Grid.Row="0" /> 
      </Grid> 
     </Grid> 
    </ControlTemplate> 
</Window.Resources> 

Creo que probablemente me refiero a ella en el camino equivocado, lo he intentado DynamicResource y StaticResource.

+0

cómo está la imagen de fondo en el proyecto usted, incluyendo? Si está incluido como 'Contenido', entonces hubiera esperado que tu ImageSource se viera más como esto: 'ImageSource =" paquete: // aplicación: ,,,/componente/imágenes/bird_text_bg.jpg "' – paul

+1

Si lo especificas directamente (en lugar de usar un recurso) ¿aparece? – Tim

+0

Eso es lo extraño. Lo tengo configurado para contenido y tengo las imágenes en Visual Studio. Simplemente utilicé el botón de elipse dentro de Visual Studio para "ImageSource" en el panel de propiedades y luego automáticamente generé esa ruta para mí. – Luke

Respuesta

2

en su red principal que tiene del niño interior que cubren todo el espacio disponible de la rejilla externa es por eso que no será capaz de ver el fondo.

<Grid Width="444" 
      Height="500" 
      Background="{DynamicResource BackgroundSponge}" 
      ShowGridLines="False" 
      SnapsToDevicePixels="True"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="51" /> 
      <RowDefinition Height="36" /> 
     </Grid.RowDefinitions> 
     <Grid Grid.Row="0" Background="#286c97" Opacity="0.2" Margin="5"/> 
     <Grid Grid.Row="1" Background="#5898c0" Opacity="0.2" Margin="5"> 
      <ContentPresenter Grid.Row="0" /> 
     </Grid> 
    </Grid> 

tiene el ancho que está bien, pero qué pasa con la altura. si su altura es más grande que la de sus elementos secundarios, aparecerá.

o mejor tener margen en el interior de los niños.

Margen = "5"

o hacer niño interior transparente como

Opacidad = "0.2"

+0

¡Gracias! Me estaba volviendo loco :) – Luke

+0

¿Se exportan automáticamente cuando una imagen que está en mi disco duro usa una ruta absoluta? – BlueWizard

+0

Cualquier recurso externo no se exporta, ya que no existe en el árbol de objetos interno. – JSJ

3

Siempre lo hice así;

<Grid> 
    <Grid.Background> 
     <ImageBrush ImageSource="/Resources/Images/BG_BlankOptimized.png"/> 
    </Grid.Background> 
</Grid> 

O si llamándolo por un recurso ImageBrush mediante una ruta de una imagen más a lo que Paul sugirió utilizar StaticResource para llamar a ese estilo.

9

Lo uso comúnmente. Si las imágenes se agregan al proyecto como un Recurso, consúltelas relativamente así.

<ImageBrush x:Key="play" ImageSource="../Images/Buttons/Play.png" /> 

y luego hacer referencia el cepillo de imagen:

<Border Background="{StaticResource play}"/> 
+0

Agregaría que la parte más importante, para mí, era la parte "Si las imágenes se agregan al proyecto como un Recurso", porque en mi caso eran como Contenido y por eso tuve un problema. ¡Gracias! – Nikola