2012-05-23 15 views
6

Ich möchte eine ImageBrush in XAML verwenden, um einen Hintergrund auf eine Grid anzuwenden.Raster Hintergrundbild mit ImageBrush

Ich habe die Bürste eine x:Key gegeben und möchte es in meinem Raster beziehen.

Leider kommt es nicht mit dem Bild als Hintergrund überhaupt.

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

Ich glaube, ich wahrscheinlich in der falschen Art und Weise, um es mich beziehen, habe ich DynamicResource und StaticResource versucht.

+0

transparent machen, wie werden auch Sie Ihr Hintergrundbild im Projekt? Wenn es als "Inhalt" enthalten ist, hätte ich erwartet, dass Ihre ImageSource eher wie folgt aussieht: ImageSource = pack: // application: ,,,/component/images/bird_text_bg.jpg "' – paul

+1

Wenn Sie es direkt angeben (anstatt eine Ressource zu verwenden) zeigt es sich? – Tim

+0

Das ist die seltsame Sache. Ich habe es auf Inhalt eingestellt und habe die Bilder in Visual Studio. Ich habe einfach die Ellipse-Schaltfläche in Visual Studio für "ImageSource" im Eigenschaftsfenster verwendet und dann automatisch diesen Pfad für mich generiert. – Luke

Antwort

2

In Ihrem Hauptnetz Sie inneres Kind haben, die alle verfügbare Raum der äußeren Gitter decken das ist, warum Sie nicht in der Lage sein, den Hintergrund zu sehen.

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

hat nur Breite, die ok ist, aber was ist mit der Höhe. Wenn du deine Größe einfach größer machst als deine Kinder, wird es angezeigt.

oder besser, Rand in inneren Kindern zu haben.

Margin = "5"

oder inneres Kind wie

Opazität = "0.2"

+0

Vielen Dank! Ich wurde verrückt :) – Luke

+0

Werden sie automatisch exportiert, wenn ich ein Bild auf meiner Festplatte mit einem absoluten Pfad bin? – BlueWizard

+0

Jede externe Ressource wird nicht exportiert, da sie nicht in der internen Objektbaumstruktur existiert. – JSJ

3

Ich habe es immer so gemacht;

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

Oder wenn es von einem ImageBrush Ressource Aufruf mit mehr einen einem Bild Pfad wie das, was Paul vorgeschlagen Static mit diesem Stil zu nennen.

9

Ich benutze dies häufig. Wenn die Bilder dem Projekt als Ressource hinzugefügt werden, referenzieren Sie sie relativ.

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

Und dann verweisen das Bild Pinsel:

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

Ich würde hinzufügen, dass der wichtigste Teil für mich der Teil "Wenn die Bilder dem Projekt als Ressource hinzugefügt wurden" war, denn in meinem Fall waren sie als Inhalt und deshalb hatte ich ein Problem. Vielen Dank! – Nikola