TextBlock显示问题
问题描述:
条件一:TextBlock的Text内容超过本身显示的范围时,以"..."的形式显示部分内容
条件二:单击"..."后弹出一个Div,来将TextBlock对应内容全部展现。
条件三:使用触屏
问题分析与解决:
1. 对于条件一,设置TextBlock的TextTrimming属性即可
2. 对于条件二,计算一下TextBlock的总宽度和展现内容所需长度,进行对比,能够完全展示,则不显示"..."的按钮,否则显示
具体计算方法如下:
//获取Textblock真正长度
var subjectivemaxWidth = Application.Current.MainWindow.ActualWidth / 2;
this.subjectiveImageButton.Visibility = subjectivemaxWidth < this.GetTextBlockIdealWidth(this.subjectiveTextBlock) ? Visibility.Visible : Visibility.Collapsed;
//获取完全展示内容所需长度,其实就是ActualWidth,但有时候该值为空,因此手动计算一下更安全
private double GetTextBlockIdealWidth(TextBlock textBlock)
{
var text = textBlock.Text;
var alphabetCount = this.GetAlphabetCount(text);
var characterCount = text.Length - alphabetCount;
var idealWidth = textBlock.FontSize * (alphabetCount / 2.0 + characterCount);
return idealWidth;
}
private int GetAlphabetCount(string str)
{
var count = 0;
foreach (var s in str)
{
if ((s > 'a' && s < 'z') || (s > 'A' && s < 'Z'))
{
count++;
}
}
return count;
}
3. 对于条件三,如果条件二的做法才有意义,否则使用ToolTip完全搞定了。
mark一下,如果哪位高手有更好的方法,欢迎共享。