在TextBlock
类中,当文本超出控件的范围时,有一个属性可以设置控件的TextTrimming
行为。
但是,如果TextBlock
已被修剪,我似乎找不到可以通知我的申请的属性。
我遇到的问题是我有一个固定大小的TextBlock
,其文本超出了大小。发生这种情况时,我想动态调整字体大小以使文本适合块。
我知道如何做到这一点?
伪代码
// Function added to TextBlock as SizeChanged event handler.
private void textBlock_SizeChanged(object sender, SizeChangedEventArgs e)
{
TextBlock textBlock = sender as TextBlock;
if(textBlock.IsTrimmed && textBlock.FontSize > 10) // NOTE: IsTrimmed Property does not exist.
{
textBlock.FontSize -= 10;
}
}
然后UI线程将以递归方式缩小文本,直到它适合TextBlock
答案 0 :(得分:0)
这是一个有效的解决方案。
private void textBlock_SizeChanged(object sender, SizeChangedEventArgs e)
{
TextBlock tb = sender as TextBlock;
if (tb != null)
{
Grid parent = tb.Parent as Grid;
if(parent != null)
{
if(parent.ActualWidth < tb.ActualWidth)
{
tb.FontSize -= 10;
}
}
}
}
虽然效率不高。如果有一个可用于确定字体大小,字符串长度和像素宽度的算法,则可以对其进行改进。