获取用于画布背景的ImageBrush控件的实际大小

5
我正在尝试找出如何获取设置为Canvas控件背景的图像的“查看大小”。使用ImageBrush设置背景,并将其拉伸设置为UniForm。
如果拉伸属性设置为Fill,则可以使用画布的ActualWidth和ActualHeight。

但是,对于UniForm,这是不可能的,那么我该如何处理呢?

这是我的XAML:

<Grid DataContext="{Binding ImageViewerVM.CurrentImage}">
    <controls:RubberBandingCanvas x:Name="RubCanvas">
        <controls:RubberBandingCanvas.Resources>
            <Converters:ControlVisibilityConverter x:Key="VisibilityHiddenConverter" />
            <Converters:StringToBitmapConverter x:Key="StringToBitmapConverter" />
        </controls:RubberBandingCanvas.Resources>
        <controls:RubberBandingCanvas.Background>
            <ImageBrush x:Name="ibCurrentImage" ImageSource="{Binding Path=Path, Converter={StaticResource StringToBitmapConverter}}" Stretch="Uniform"></ImageBrush>
        </controls:RubberBandingCanvas.Background>
        <Ellipse Canvas.Top="10" Canvas.Right="10" Fill="Red" Stroke="Black" Height="15" Width="15" Visibility="{Binding Path=IsMultiTiff, Converter={StaticResource VisibilityHiddenConverter}}"/>            
    </controls:RubberBandingCanvas>
</Grid>


最好的问候,
Jesper Jensen


如果这个解决方案对您有用,请考虑将其标记为答案。 - Sisyphe
1个回答

2

无法直接获取ImageBrush的实际大小。我的建议是根据Canvas RenderSize手动计算大小。

var ratio = Math.Min(RubCanvas.RenderSize.Width / CanvasBackground.ImageSource.Width, RubCanvas.RenderSize.Height / CanvasBackground.ImageSource.Height);
var imageBrushWidth = CanvasBackground.ImageSource.Width * ratio;
var imageBrushHeight = CanvasBackground.ImageSource.Height * ratio;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接