0
我将图像存储在websevers中。如果第一个服务器不可用,我希望有一个替代路径,用于加载图像。来自网络的WPF图像替代来源
喜欢的东西:
<Image Source="http://server1/images/image1"
AlternativeSource="http://server2/images/image1"/>
怎么办呢?
我将图像存储在websevers中。如果第一个服务器不可用,我希望有一个替代路径,用于加载图像。来自网络的WPF图像替代来源
喜欢的东西:
<Image Source="http://server1/images/image1"
AlternativeSource="http://server2/images/image1"/>
怎么办呢?
对我们来说幸运图片控件在图片加载失败时引发一个事件,所以很容易检查图片加载是否失败。
您可以采取的一种方法是扩展图像控件。
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