2013-08-31 6 views

Odpowiedz

16

Można to osiągnąć przez ustawienie TargetNullValue

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

Mam aplikację, w której ładuje setki obrazów. Jak wyświetlić obraz domyślny do momentu załadowania rzeczywistego obrazu? –

+0

@ArjunKR możesz odwiedzić http://stackoverflow.com/questions/19113141/is-it-possible-to-show-default-image-before-original-load-from-server –

1

Można użyć ImageFailed zdarzenie i ChangePropertyAction.

Kod ten fragment pracował dla mnie:

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

Mam aplikację, gdzie to ładuje setki obrazów. Jak wyświetlić obraz domyślny do momentu załadowania rzeczywistego obrazu? –

3

Można ustawić zdarzenie ImageFailed na obrazie,

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

i kliknąć na poniższy C#, aby załadować konkretny obraz na swoim miejscu.

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

Można rzeczywiście pójść w drugą stronę, która jest lepsze doświadczenie moim zdaniem po prostu za pomocą dwóch Image kontrole w Grid układ, jeden z lokalnego źródła zastępczego i jeden ze zdalnym Binding. Obraz lokalny jest już dostępny, gdy zdalne wiązanie jest puste. Jeśli jednak wiązanie nie ma wartości NULL, automatycznie zakrywa lokalny obraz zastępczy po wyrenderowaniu.

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

To działa w teorii, ale moje obrazy mają przezroczyste tło. Oznacza to, że widzę obraz poniżej mojego drugiego obrazu. Jak mogę ukryć obraz pod spodem? – Sweepster

+0

@Sweepster Spróbuj użyć zdarzenia ImageOpened powiązanego obrazu. Ustaw krycie obrazu zastępczego na 0, jeśli zdarzenie otwierania obrazu zdarzenia związanego z danymi zostanie pomyślnie uruchomione !! – Shikhar

0

użycie TargetNullValue atrybut. Jest to bardzo pomocne, jeśli nie chcę wyświetlać żadnego obrazu.

Powiązane problemy