2013-08-31 2 views
10

Ich verwende Bindung für die Quelle eines Image Kontrolle.Wie wird eine Standardquelle für ein Image festgelegt, wenn die Bindungsquelle null ist?

<Image Source="{Binding ImageUri}"/> 

Aber diese ImageUri kann null sein, dafür ich ein Standardbild, einen Platzhalter, denn das verwendet werden soll, die in /Assets/PlaceHolder.png zum Beispiel sein können.

Wie kann ich ein Standardbild festlegen? Vielen Dank. (es ist ein WP8 App, sollte aber nicht anders von WPF sein)

Antwort

16

Sie können es erreichen, indem TargetNullValue

<Image> 
    <Image.Source> 
     <Binding Path="ImageUri" > 
      <Binding.TargetNullValue> 
       <ImageSource>/Assets/PlaceHolder.png</ImageSource> 
      </Binding.TargetNullValue> 
     </Binding> 
    </Image.Source> 
</Image> 
+1

Ich habe eine Anwendung, wo es Hunderte von Bildern lädt. Wie zeige ich ein Standardbild an, bis das eigentliche Bild geladen ist? –

+0

@ArjunKR möchten Sie vielleicht besuchen http://StackOverflow.com/Questions/19113141/is-it-possible-to-show-default-image-before-original-load-from-server –

1

Einstellung können Sie verwenden ImageFailed Ereignis und ChangePropertyAction.

Dieser Code Snippet für mich gearbeitet:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 

<Image x:Name="GeologyMapsLegend" Stretch="Fill" Height="150"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="ImageFailed"> 
      <ei:ChangePropertyAction PropertyName="Source" TargetName="GeologyMapsLegend"> 
       <ei:ChangePropertyAction.Value> 
        <ImageSource> 
         /LanSysWebGIS;component/Pictures/Icon/NoImageAvailable.jpg 
        </ImageSource> 
       </ei:ChangePropertyAction.Value> 
      </ei:ChangePropertyAction> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</Image> 
+0

Ich habe eine Anwendung, wo es lädt Hunderte von Bildern. Wie zeige ich ein Standardbild an, bis das eigentliche Bild geladen ist? –

3

Sie können das ImageFailed Ereignis auf Ihrem Bild gesetzt,

<Image Source="{Binding ImageUri}" ImageFailed="Image_ImageFailed"/> 

und verwenden Sie die folgenden C# ein bestimmtes Bild an seinem Platz zu laden.

private void Image_ImageFailed(object sender, ExceptionRoutedEventArgs e) 
{ 
    ((Image)sender).Source = new BitmapImage(new Uri("/Assets/MyDefaultImage.png", UriKind.Relative)); 
} 
2

können Sie gehen tatsächlich in die andere Richtung, um die sie eine bessere Erfahrung meiner Meinung nach, indem einfach zwei Image Steuerelemente in einem Grid Layout, eine mit der lokalen Platzhalter Quelle und einem mit der Fernbedienung Binding. Das lokale Image ist bereits vorhanden, wenn Ihre Remote-Bindung null ist. Wenn die Bindung jedoch nicht null ist, wird das lokale Platzhalterbild nach dem Rendern automatisch abgedeckt.

<Grid> 
    <Image Source="Assets/Placeholder.png"/> 
    <Image Source="{Binding ImageUri}"/> 
</Grid> 
+0

Das funktioniert in der Theorie, aber meine Bilder haben transparente Hintergründe. Das bedeutet, dass ich das Bild unter meinem anderen Bild sehen kann. Wie kann ich das Bild darunter verstecken? – Sweepster

+0

@Sweepster Versuchen Sie es mit dem ImageOpened-Ereignis des gebundenen Bildes. Legen Sie die Deckkraft des Platzhalterbilds auf 0 fest, wenn das Ereignis für das geöffnete Bild des datengebundenen Ereignisses erfolgreich ausgelöst wird. – Shikhar

0

Verwendung TargetNullValue Attribut. Es ist sehr hilfreich, wenn ich kein Bild anzeigen möchte.

Verwandte Themen