为什么图像大小为 NaN (wpf) 以及如何通过鼠标滚轮调整大小?

Mos*_*ico 3 c# wpf canvas image viewbox

我想加载图像并将其放入视图框中。图像显示正确,但是,当我要获取它的宽度和高度时,它都是 NaN。

这是我的图像加载代码:

Image img = new Image();
img.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("1.png");

Viewbox vb = new Viewbox();

vb.Width = img.Width;
vb.Height = img.Height;

vb.Child = img;

cnv.Children.Add(vb);
Run Code Online (Sandbox Code Playgroud)

我想要获取图像宽度和高度的原因是这样我可以稍后在应用程序内调整它的大小(通过视图框调整大小)。

知道如何获取图像尺寸吗?

这就是我要调整它的大小的方法(通过鼠标滚轮)

    private void cnv_MouseWheel(object sender, MouseWheelEventArgs e)
    {
        if (vb != null)
        {
            vb.Width += Mouse.MouseWheelDeltaForOneLine;
            vb.Height += Mouse.MouseWheelDeltaForOneLine;
        }
    }
Run Code Online (Sandbox Code Playgroud)

它返回错误并表示 vb.Width 不是有效值。

总结一下问题:

  1. 如何在wpf中获取图像的宽度/高度?
  2. 如何通过鼠标滚轮调整视图框的大小(这也会导致图像大小调整)?例如,如果我向上滚动滚轮,则宽度和高度加 1,如果向下滚动滚轮,则宽度和高度减少 1。

谢谢

PS Viewbox vb;Image img;是一个全局变量,我只是缩短了脚本。PSS 我知道 Viewbox 的宽度和高度是否由数字初始化,比如说 100 和 100,它会起作用,我只是想知道如何获取图像的原始大小。

编辑:调整大小可以通过检测是否向上或向下滚动来实现e.Delta > 0e.Delta < 0 来源:http ://social.msdn.microsoft.com/Forums/vstudio/en-US/170c4fd0-1441-4d83-903d-594af75f8fb4 /检测鼠标滚动

She*_*dan 5

似乎该Image对象在该阶段尚未完全加载。我相信您可以使用该类Width的和Height属性。在此阶段应该已满载。ImageSource

ImageSource.Width 属性
ImageSource.Height 属性

对于其他用户,您还可以从类(继承自该类)的ActualWidthActualHeight属性中找到所需的值,而不是更常见的和属性。ImageFrameworkElementWidthHeight

FrameworkElement.ActualHeight 属性
FrameworkElement.ActualWidth 属性

  • 从本质上讲,是的。在 WPF 中,不推荐以您正在使用的方式使用 Width 和 Height 属性。对于位图,最简单的方法可能是查看 png 文件的实际尺寸(请参阅下面我的答案)。Width 和 Height 包含所需的宽度和高度或 double.NaN 如果未设置,ActualWidth 和 ActualHeight 仅在 UI 渲染后才有效,而在设置 Source 属性后则不然。 (2认同)