C# 如何在渲染文本块之前测量其大小
在呈现文本块之前,我需要知道它的大小。 我已经经历了这些,但它不起作用(可能是我做错了什么)。 我的Textblock绑定到ViewModel中的属性,在代码隐藏中,我正在监视文本更改事件 XAML: 试试这个: 调用Measure(),然后调用Arrange(),然后更新ActualWidth和ActualHeightC# 如何在渲染文本块之前测量其大小,c#,wpf,xaml,C#,Wpf,Xaml,在呈现文本块之前,我需要知道它的大小。 我已经经历了这些,但它不起作用(可能是我做错了什么)。 我的Textblock绑定到ViewModel中的属性,在代码隐藏中,我正在监视文本更改事件 XAML: 试试这个: 调用Measure(),然后调用Arrange(),然后更新ActualWidth和ActualHeight 我也有同样的问题。我调用了UpdateLayout()方法,该方法更新了ActualHeight和ActualWidth var viewbox = new Viewbox {
我也有同样的问题。我调用了UpdateLayout()方法,该方法更新了ActualHeight和ActualWidth
var viewbox = new Viewbox { Child = contentPresenter };
viewbox.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
viewbox.Arrange(new Rect(viewbox.DesiredSize));
viewbox.UpdateLayout();
viewbox.Child = null;
您必须查看ActualWidth和ActualHeight属性,DesiredSize是程序员指定的。ActualWidth不起作用,请参阅上面的“我的编辑”。订阅SizeChanged事件并查看大小是否发生更改,可能您的布局有问题,我已调用Mesaure()和Arrange()(请参阅上面我编辑的代码);但它仍然不起作用。
private void OnTargetUpdated(object sender, DataTransferEventArgs e)
{
var tb = sender as TextBlock;
var text = tb .Text; // here I can see updated Text
var size = tb.DesiredSize; // here DesireSize value is 0
tb.Measure(new Size(Double.PositiveInfinity,
Double.PositiveInfinity));
tb.Arrange(new Rect(tb.DesiredSize));
var width = tb.ActualWidth; // here actual width is coming 0
}
var viewbox = new Viewbox { Child = contentPresenter };
viewbox.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
viewbox.Arrange(new Rect(viewbox.DesiredSize));
viewbox.UpdateLayout();
viewbox.Child = null;