2013-08-31 24 views
10

Tôi đang sử dụng liên kết cho nguồn của điều khiển Image.Cách đặt nguồn mặc định cho Hình ảnh nếu nguồn ràng buộc là null?

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

Nhưng ImageUri này có thể được null, do tôi muốn sử dụng một hình ảnh mặc định, một giữ chỗ, cho rằng, có thể là trong /Assets/PlaceHolder.png ví dụ.

Tôi làm cách nào để đặt hình ảnh mặc định? cảm ơn. (Đó là một ứng dụng WP8, nhưng không nên khác nhau của WPF)

Trả lời

16

Bạn có thể đạt được điều đó bằng cách thiết lập TargetNullValue

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

Tôi có một ứng dụng nơi tải hàng trăm hình ảnh. Làm thế nào để hiển thị một hình ảnh mặc định cho đến khi hình ảnh thực tế được tải? –

+0

@ArjunKR bạn có thể muốn truy cập http://stackoverflow.com/questions/19113141/is-it-possible-to-show-default-image-before-original-load-from-server –

1

Bạn có thể sử dụng ImageFailed sự kiện và ChangePropertyAction.

này Code Snippet làm việc cho tôi:

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

Tôi có một ứng dụng ở đó tải hàng trăm hình ảnh. Làm thế nào để hiển thị một hình ảnh mặc định cho đến khi hình ảnh thực tế được tải? –

3

Bạn có thể thiết lập các sự kiện ImageFailed trên hình ảnh của bạn,

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

và sử dụng như sau C# để tải một hình ảnh cụ thể ở chỗ của nó.

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

Bạn thực sự có thể đi theo con đường khác xung quanh đó là một kinh nghiệm tốt hơn trong quan điểm của tôi bằng cách đơn giản sử dụng hai Image điều khiển trong một bố cục Grid, một với nguồn placeholder địa phương và một với điều khiển từ xa Binding. Hình ảnh cục bộ đã có sẵn khi bạn gắn kết từ xa của bạn là null. Tuy nhiên, nếu ràng buộc không phải là null, nó sẽ tự động bao gồm hình ảnh giữ chỗ cục bộ khi nó được hiển thị.

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

Điều này làm việc theo lý thuyết nhưng hình ảnh của tôi có nguồn gốc trong suốt. Điều đó có nghĩa là tôi có thể thấy hình ảnh bên dưới hình ảnh khác của tôi. Làm cách nào để ẩn hình ảnh bên dưới? – Sweepster

+0

@Sweepster Hãy thử sử dụng sự kiện ImageOpened của hình ảnh bị ràng buộc. Đặt độ mờ của hình ảnh trình giữ chỗ thành 0 nếu sự kiện mở hình ảnh của sự kiện ràng buộc dữ liệu được kích hoạt thành công !! – Shikhar

0

sử dụng thuộc tính TargetNullValue. Nó rất hữu ích nếu tôi không muốn hiển thị bất kỳ hình ảnh nào.

Các vấn đề liên quan