绑定文本后从控件中获取 ActualHeight
Get ActualHeight from control after it's text has been bound
我试图在更改文本后获取 TextBlock 的 ActualHeight。此文本可能在同一页面上更改多次,这意味着我页面上的 Loaded 方法仅触发一次..
在 Page Loaded 方法中获取值工作正常,但仅限于第一次。如果我更改文本块的文本,我将无法获得新的实际高度。
到目前为止我尝试过的:
- 使用页面加载方法(问题:无法获取更新的文本块大小,如果我在页面加载后更改它)
- 使用
TextBlock.Measure(new Size()); TextBlock.Arrange(new Rect());
强制控件排列并获取 ActualHeight(问题:如果我的文本块已通过换行或 \n 标记分成多行,这没有考虑在内。这意味着它总是 return 1 行高文本块的值)
我在想是否有办法在每次设置它的值时重新加载 Textblock
,这样我就可以通过 TextBlock 的 Loaded 方法获得实际高度。但是在 Windows Phone 应用程序中似乎没有 .Refresh() 方法。
在我将其文本设置为新值后,有人知道我可以做些什么来获得包括换行符在内的实际高度吗?
订阅 SizeChanged 事件。它正是针对您提供的用例。
MSDN Documentation - TextBlock Events, SizeChanged Event
只要 TextBlock 元素的 ActualHeight 或 ActualWidth 属性更改,就会触发该事件。由于 wpf 控件继承自 FrameworkElement 基础 class,WPF 控件都可以访问此 属性.
我试图在更改文本后获取 TextBlock 的 ActualHeight。此文本可能在同一页面上更改多次,这意味着我页面上的 Loaded 方法仅触发一次..
在 Page Loaded 方法中获取值工作正常,但仅限于第一次。如果我更改文本块的文本,我将无法获得新的实际高度。
到目前为止我尝试过的:
- 使用页面加载方法(问题:无法获取更新的文本块大小,如果我在页面加载后更改它)
- 使用
TextBlock.Measure(new Size()); TextBlock.Arrange(new Rect());
强制控件排列并获取 ActualHeight(问题:如果我的文本块已通过换行或 \n 标记分成多行,这没有考虑在内。这意味着它总是 return 1 行高文本块的值)
我在想是否有办法在每次设置它的值时重新加载 Textblock
,这样我就可以通过 TextBlock 的 Loaded 方法获得实际高度。但是在 Windows Phone 应用程序中似乎没有 .Refresh() 方法。
在我将其文本设置为新值后,有人知道我可以做些什么来获得包括换行符在内的实际高度吗?
订阅 SizeChanged 事件。它正是针对您提供的用例。
MSDN Documentation - TextBlock Events, SizeChanged Event
只要 TextBlock 元素的 ActualHeight 或 ActualWidth 属性更改,就会触发该事件。由于 wpf 控件继承自 FrameworkElement 基础 class,WPF 控件都可以访问此 属性.