TextBlock block = new TextBlock();
block.Text = "hello";
Size size = new Size(1024, 1024);
block.Measure(size);
Canvas.SetLeft(block, leftMargin - block.ActualWidth);
借鉴1:可惜rect方法我试了下ActualWidth还是0.0
在windows 8和windows phone中有地方我们需要计算字的宽度,例如在显示的时候需要截取多余的字变成...,还有在数据排版上面这个也是必不可少的。
一个字符显示的像素宽度与字体和字体大小有关系。我用到的是一个比较笨拙的方法,那就是拿textblock去量。
具体如下:
TextBlock tb =
new
TextBlock();
tb.FontFamily =
new
System.Windows.Media.FontFamily(
"微软雅黑"
);
tb.FontSize = 50;
tb.Text =
"hello"
;
System.Diagnostics.Debug.WriteLine(
"宽度:"
+ tb.ActualWidth +
" 高度:"
+ tb.ActualHeight);
这个方法很简单,但是到windows 8上面就不一样了。
在win8 metro程序里面,TextBlock必须要显示到UI上才能得到它的宽度和高度。这就麻烦了。
最后发现一个东西能够将它量出来。那就是矩形。
Rect rect =
new
Rect(0, 0, 1024, 1024);
TextBlock tb =
new
TextBlock();
tb.FontFamily =
new
FontFamily(
"微软雅黑"
);
tb.FontSize = 50;
tb.Text =
"hello"
;
tb.Arrange(rect);
System.Diagnostics.Debug.WriteLine(
"宽度:"
+ tb.ActualWidth +
" 高度:"
+ tb.ActualHeight);
借鉴2:在stackoverflow上找到了
TextBlock tbl = new TextBlock ();
tbl . text = "Kishore" ;
double x = tbl . ActualHeight ;
double y = tbl . ActualWidth ;
If i execute the code from the loaded event in Metro - winRT will return 0 for both.
How can I get the ActualWidth
in the Loaded
or SizeChanged
event?
asked
May 11 '12 at 17:32
Call Measure() then Arrange() and then ActualWidth
and ActualHeight
will be updated.
answered
May 12 '12 at 2:14