gpt4 book ai didi

c# - 标签大小总是 NaN?

转载 作者:行者123 更新时间:2023-11-30 15:10:51 25 4
gpt4 key购买 nike

我有一个面板,我想扩展它并覆盖 MeassureOverride 和 Arrange 以获得我的自定义布局。基本上,面板将包含一些标签。由于标签有一些文字内容,它应该有一个特定的大小。但是,当我在 MeassureOverride 或 ArrangeOverride 中使用 label.ActualHeight 或 actualwidth、desiredSize ... 时,所有结果都为 NaN。有什么方法可以获得所需的标签大小,以便文本内容适合?

最佳答案

您是否在每个方法的末尾调用了 base.MeasureOverride(abailableSize) 和 base.ArrangeOverride(finalSize)?

Here是创建自定义面板的例子

MeasureOverride 的自定义实现可能如下所示(来自帖子):

protected override Size MeasureOverride(Size availableSize)
{
Size sizeSoFar = new Size(0, 0);
double maxWidth = 0.0;

foreach (UIElement child in Children)
{
child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));

if (sizeSoFar.Width + child.DesiredSize.Width > availableSize.Width)
{
sizeSoFar.Height += child.DesiredSize.Height;
sizeSoFar.Width = 0;
}
else
{
sizeSoFar.Width += child.DesiredSize.Width;
maxWidth = Math.Max(sizeSoFar.Width, maxWidth);
}
}

return new Size(maxWidth, sizeSoFar.Height);
}

ArrangeOverride 的自定义实现可能如下所示(来自帖子):

protected override Size ArrangeOverride(Size finalSize)
{
Size sizeSoFar = new Size(0, 0);

foreach (UIElement child in Children)
{
child.Arrange(new Rect(sizeSoFar.Width, sizeSoFar.Height,
child.DesiredSize.Width, child.DesiredSize.Height));

if (sizeSoFar.Width + child.DesiredSize.Width >= finalSize.Width)
{
sizeSoFar.Height += child.DesiredSize.Height;
sizeSoFar.Width = 0;
}
else
{
sizeSoFar.Width += child.DesiredSize.Width;
}
}

return finalSize;
}

如果要强制面板渲染(调用 MeasureOverride 函数),请使用 InvalidateMeasure功能

您还可以查看 Custom Panel Elements在 msdn 上。

关于c# - 标签大小总是 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2928498/

25 4 0