我有一个简单的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);
答案 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);
}
}
}