如何在C#/ WPF中检测网格中的溢出

时间:2019-05-09 15:56:12

标签: c# wpf

我有一个简单的Grid对象,其中有一个Child,这是一个TextBlock对象,其中包含一些文本。该网格被插入到画布中。首先,WPF计算网格的宽度和高度,以使TextBlock正确地适合网格。问题在于,现在应该并且应该允许用户调整网格的大小,这很好。但是减小Grid会导致比Grid更大的TextBlock,从而使文本不再完全可见。我想问一下C#是否为我提供了Grid.hasOverlow()之类的函数,可以在其中检查内容是否大于父项。

这基本上就是我将Textblock添加到网格中的方式。

Grid grid = new Grid();
TextBlock tb = new TextBlock();
tb.Text = "Some Text";
grid.Children.Add(tb);
MyCanvas.Children.Add(grid);

2 个答案:

答案 0 :(得分:0)

我不知道任何Grid.hasOverflow函数类型,但是当您调整大小时,您可能只创建文本对象引用的委托回调。 例如。

private delegate void OnGridResized(float newsizeX, float newsizeY);

private OnGridResized Callback;

//Your Function call
if (Callback != null) Callback.Invoke();

然后将您的文本调整大小事件订阅到唤醒时

Main()
{
Callback += Text.Resize;
}

不知道这是否有帮助,但我希望它对您有用!

答案 1 :(得分:0)

在问这个问题时,我想知道是否可以检查父母和孩子的身高和宽度,并减小字体大小,直到孩子的身高和宽度不大于父母的身高和宽度,并且看起来像它实际上确实可以解决。

那是我如何解决它的方法。

if(grid.Children.Count > 0)
            {
                if (grid.Children[0].GetType().Equals(typeof(TextBlock)))
                {
                    TextBlock tb = (TextBlock)grid.Children[0];
                    if(grid.ActualHeight < tb.ActualHeight || grid.ActualWidth < tb.ActualWidth)
                    {
                        do
                        {
                            tb.FontSize -= 0.1;
                            grid.UpdateLayout();
                        } while (grid.ActualHeight < tb.ActualHeight || grid.ActualWidth < tb.ActualWidth);
                    }
                }
            }