gpt4 book ai didi

.net - 如何确定 DockPanel 中包含的所有项目的高度

转载 作者:行者123 更新时间:2023-12-04 21:10:53 25 4
gpt4 key购买 nike

我有一个 DockPanel,我正在以编程方式向其中添加 TextBlock 控件。 DockPanel 定义如下:

    <DockPanel x:Name="staHeadlines" Margin="0,10,0,0"
ScrollViewer.VerticalScrollBarVisibility="Disabled"/>

TextBlocks 添加到 DockPanel 如下:
    For count = headlinePosition To maxHeadlineCount
Dim tb As New TextBlock With {.Text = headlines.Item(count),
.FontFamily = New FontFamily("Segoe UI Semilight"), .FontSize = "22",
.TextWrapping = TextWrapping.Wrap, .Margin = New Thickness(0, 10, 0, 10)}
DockPanel.SetDock(tb, Dock.Top)
staHeadlines.Children.Add(tb)
Next

DockPanel 用于显示新闻标题,每个 TextBlock 一个。我想添加足够的 TextBlocks 来填充可用空间,但不要让底部项目溢出 DockPanel 边界。由于 TextBlock 的高度由内容定义 - 我事先不知道 - 我需要能够计算添加到 DockPanel 的所有项目的高度,以确定添加的最后一个子项是否会溢出 DockPanel 的边界并出现剪辑。

有任何想法吗?

最佳答案

你可以试试这样的...

        private void TryAddNewTextBox(TextBox textbox)
{
this.staHeadlines.Children.Add(textbox);
textbox.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));

var totalChildrenHeight = textbox.DesiredSize.Height + this.staHeadlines.Children.OfType<TextBox>().Sum(childTextbox => GetElementBoundsHeight(childTextbox));

if (totalChildrenHeight > GetElementBoundsHeight(this.staHeadlines))
this.staHeadlines.Children.RemoveAt(this.staHeadlines.Children.Count - 1);
}

private double GetElementBoundsHeight(FrameworkElement element)
{
return element.RenderTransform.TransformBounds(new Rect(element.RenderSize)).Height;
}

这里棘手的部分是在渲染之前获取新 TextBox 的大小。为此,我们首先添加到 DockPanel,然后调用 Measure在文本框上。路过 new Size(double.PositiveInfinity, double.PositiveInfinity) ,我们基本上是说'先生。 TextBox,将自己呈现为显示内容所需的大小”。通过这样做,我们知道新控件的大小。然后我们要做的就是将新 TextBox 的高度添加到 DockPanel 的所有子级高度边界的总和中。将其结果与 DockPanel 和 BOOM 的边界进行比较。可以稍微清理一下这段代码,但希望它有所帮助。

关于.net - 如何确定 DockPanel 中包含的所有项目的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34888225/

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