in code/src/UI/Controls/Markdown.cs [403:462]
private Inline ImageInlineEvaluator(Match match)
{
if (match == null)
{
throw new ArgumentNullException(nameof(match));
}
string linkText = match.Groups[2].Value;
string url = match.Groups[3].Value;
BitmapImage imgSource = null;
try
{
if (!Uri.IsWellFormedUriString(url, UriKind.Absolute) && !System.IO.Path.IsPathRooted(url))
{
url = System.IO.Path.Combine(AssetPathRoot ?? string.Empty, url);
}
imgSource = new BitmapImage(new Uri(url, UriKind.RelativeOrAbsolute));
}
catch (Exception)
{
return new Run("!" + url) { Foreground = Brushes.Red };
}
var image = new Image { Source = imgSource, Tag = linkText };
if (ImageStyle == null)
{
image.Margin = new Thickness(0);
}
else
{
image.Style = ImageStyle;
}
// Bind size so document is updated when image is downloaded
if (imgSource.IsDownloading)
{
var binding = new Binding(nameof(BitmapImage.Width))
{
Source = imgSource,
Mode = BindingMode.OneWay,
};
BindingExpressionBase bindingExpression = BindingOperations.SetBinding(image, Image.WidthProperty, binding);
void DownloadCompletedHandler(object sender, EventArgs e)
{
imgSource.DownloadCompleted -= DownloadCompletedHandler;
bindingExpression.UpdateTarget();
}
imgSource.DownloadCompleted += DownloadCompletedHandler;
}
else
{
image.Width = imgSource.Width;
}
return new InlineUIContainer(image);
}