在文本绑定后从控件获取ActualHeight

时间:2015-05-25 18:59:45

标签: c# xaml windows-phone-8

我试图在文本更改后获取TextBlock的ActualHeight。此文本可能在同一页面上多次更改,这意味着我的页面上的Loaded方法只会被触发一次..

获取Page Loaded方法中的值工作正常,但仅限第一次。如果我更改了文本块的文本,则无法获得新的实际高度。

到目前为止我尝试过:

  • 使用Page Loaded方法(问题:无法获取更新的文本块大小,如果我在页面加载后更改它)
  • 使用TextBlock.Measure(new Size()); TextBlock.Arrange(new Rect());强制控件排列并获取ActualHeight(问题:如果我的文本块通过wrap或\ n标签分成多行,则不会考虑这一点。这意味着它将会总是返回1行高度文本块的值)

我在想是否有办法在每次设置它的值时重新加载Textblock,这样我就可以通过TextBlock的Loaded方法获得实际高度。但是在Windows Phone App中似乎没有.Refresh()方法。

在我将文本设置为新值后,有没有人知道如何获得包括换行符在内的实际高度?

1 个答案:

答案 0 :(得分:1)

订阅SizeChanged事件。它恰好是您提供的用例。

MSDN Documentation - TextBlock Events, SizeChanged Event

只要TextHlock元素的ActualHeight或ActualWidth属性发生更改,该事件就会触发。由于wpf控件继承自FrameworkElement基类,因此WPF控件都可以访问此属性。