c# - 获取 Canvas 背景的画笔控件的实际大小

标签 c# wpf xaml wpf-controls

我想弄清楚如何获取在 Canvas 控件上设置为背景的图像的“ View 大小”。 背景设置为 ImageBrush,strech 设置为 UniForm。
如果 strech 属性设置为 Fill,那么我可以只使用 Canvas 的 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;

关于c# - 获取 Canvas 背景的画笔控件的实际大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13247756/

相关文章:

c# - 两台服务器之间的高效文件读/写

c# - 带锁的字典还是并发字典?

c# - 在 WPF 应用程序中使用任务和回调实现自定义异步 WCF 调用处理时 UI 卡住

c# - 动态更新 DataTemplate 的源

c# - 样式应用不正确

c# - WPF DataGridRow ContextMenu MenuItem 单击事件未触发

C# winforms 在特定情况下不捕获异常

c# - .NET 正则表达式,只有数字,没有空格

wpf - 指定 DataGrid 单元格跨多列

.net - Silverlight 与 WPF