c# – 获取画布背景的图像画笔控件的实际大小

我试图弄清楚如何获得在Canvas控件上设置为背景的图像的“视图大小”.
背景设置为 ImageBrush,strech设置为UniForm.
如果strech属性设置为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>

最好的祝福,
杰斯珀詹森

解决方法

无法获得开箱即用的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;

相关文章

有一张图片如下所示: Kimi上有一个功能,就是解析图片内容,...
Kimi上有一个功能,就是增加文件之后对话,比如我有如下一个...
Semantie Kernel中对话请求默认是发送到OpenAI去的: 其他与...
Funcion Calling介绍 函数调用允许您将模型如gpt-4o与外部工...
本文介绍了在SemanticKernel/C#中如何使用Ollama中的对话模型...
Ollama介绍 Ollama是一个开源项目,专注于开发和部署大语言模...