gpt4 book ai didi

wpf - 如果 WPF 控件从未呈现过,它是否有可能具有 ActualWidth 和 ActualHeight?

转载 作者:行者123 更新时间:2023-12-04 19:21:38 24 4
gpt4 key购买 nike

我需要一个 Viewport3D仅用于使用 Petzold.Media3D.ViewportInfo 进行几何计算.我宁愿不必将它放在 Window 中。或以其他方式呈现它。

我试图通过实例化 Viewport3D 来完成此操作。并使用以下 C# 方法设置一些属性:

private Viewport3D CreateViewport(MainSettings settings)
{
var cameraPosition = new Point3D(0, 0, settings.CameraHeight);
var cameraLookDirection = new Vector3D(0, 0, -1);
var cameraUpDirection = new Vector3D(0, 1, 0);
var camera = new PerspectiveCamera
{
Position = cameraPosition,
LookDirection = cameraLookDirection,
UpDirection = cameraUpDirection
};
var viewport = new Viewport3D
{
Camera = camera,
Width = settings.ViewportWidth,
Height = settings.ViewportHeight
};
return viewport;
}

稍后,我尝试使用此视口(viewport)使用此方法将鼠标位置转换为 3D 位置:
public Point3D? Point2dToPoint3d(Point point)
{
var range = new LineRange();
var isValid = ViewportInfo.Point2DtoPoint3D(_viewport, point, out range);
if (isValid)
return range.PointFromZ(0);
else
return null;
}

不幸的是,它不起作用。我认为原因是 ActualWidthActualHeight的视口(viewport)都是零(这些是只读属性,所以我不能手动设置它们)。 (注意:我已经用实际渲染的 Viewport3D 测试了完全相同的方法,并且效果很好,所以我知道问题不在于我的转换器方法。)

知道如何让 WPF 分配 ActualWidthActualHeight基于 Width 的控件的和 Height设置?

我尝试设置 HorizontalAlignmentVerticalAlignmentLeftTop ,我也弄乱了 MinWidthMinHeight ,但这些属性对 ActualWidth 没有任何影响或 ActualHeight .

最佳答案

来自 ActualWidth 的 MSDN 主题属性(property):

This property is a calculated value based on other width inputs, and the layout system. The value is set by the layout system itself, based on an actual rendering pass, and may therefore lag slightly behind the set value of properties such as Width that are the basis of the input change.



因此,这听起来像是要设置属性需要渲染 channel 。但是,您可以尝试调用 Measure(Size) 然后 Arrange(Rect) 模拟布局过程。也许这已经足够了。

关于wpf - 如果 WPF 控件从未呈现过,它是否有可能具有 ActualWidth 和 ActualHeight?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com