2017-07-04 21 views
0

我将图像存储在websevers中。如果第一个服务器不可用,我希望有一个替代路径,用于加载图像。来自网络的WPF图像替代来源

喜欢的东西:

<Image Source="http://server1/images/image1" 
      AlternativeSource="http://server2/images/image1"/> 

怎么办呢?

回答

1

对我们来说幸运图片控件在图片加载失败时引发一个事件,所以很容易检查图片加载是否失败。

您可以采取的一种方法是扩展图像控件。

public class AlternativeImage : Image 
{ 

    private bool _tryAlternativeSource ; 

    public string AlternativeSource 
    { 
     get { return (string)GetValue(AlternativeSourceProperty); } 
     set { SetValue(AlternativeSourceProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for ItemTemplate. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty AlternativeSourceProperty = 
     DependencyProperty.Register("AlternativeSource", typeof(string), typeof(AlternativeImage), new PropertyMetadata(null)); 

    public AlternativeImage() 
    { 
     Initialized += OnInitialized; 
    } 

    private void OnInitialized(object sender, EventArgs eventArgs) 
    { 
     _tryAlternativeSource = !string.IsNullOrEmpty(AlternativeSource); 

     //Note , ths need to be unregistered 
     ImageFailed += OnImageFailed; 
    } 

    private void OnImageFailed(object sender, ExceptionRoutedEventArgs exceptionRoutedEventArgs) 
    { 
     if (!_tryAlternativeSource) 
      return; 

     _tryAlternativeSource = false; 

     Source = new ImageSourceConverter().ConvertFromString(AlternativeSource) as ImageSource; 
    } 
} 

,然后用它像这样

<controls:AlternativeImage Source="http://server1/images/image1" 
     AlternativeSource="https://media.licdn.com/mpr/mpr/p/1/005/07f/0e1/07ab226.jpg"/> 

上传的完整代码Here