Заимствование из того, что я нашел здесь Я придумал:
Внутри тега изображения в XAML сделать:
<Image.Resources>
<c:StringJoinConverter x:Key="StringJoin" />
</Image.Resources>
<Image.Tag>
<!-- Get Image's actual width & height and store it in the control's Tag -->
<MultiBinding Converter="{StaticResource StringJoin}">
<Binding RelativeSource="{RelativeSource Self}" Path="Source.PixelWidth" />
<Binding RelativeSource="{RelativeSource Self}" Path="Source.PixelHeight" />
</MultiBinding>
</Image.Tag>
Вам потребуется настроить пространство имен c
в верхней части файла XAML для папки / пространства имен конвертера, например:
xmlns:c="clr-namespace:Project.Converters"
Затем создание конвертера:
public class StringJoinConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return string.Join((parameter ?? ",").ToString(), values);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Затем вы можете извлечь фактическую (пиксель) ширину и высоту изображения с помощью:
var tag = imageControl.Tag; // width,height
List<double> size = tag.ToString()
.Split(',')
.Select(d => Convert.ToDouble(d))
.ToList();
double imageWidth = size[0],
imageHeight = size[1];