Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在渲染文本块之前测量其大小_C#_Wpf_Xaml - Fatal编程技术网

C# 如何在渲染文本块之前测量其大小

C# 如何在渲染文本块之前测量其大小,c#,wpf,xaml,C#,Wpf,Xaml,在呈现文本块之前,我需要知道它的大小。 我已经经历了这些,但它不起作用(可能是我做错了什么)。 我的Textblock绑定到ViewModel中的属性,在代码隐藏中,我正在监视文本更改事件 XAML: 试试这个: 调用Measure(),然后调用Arrange(),然后更新ActualWidth和ActualHeight 我也有同样的问题。我调用了UpdateLayout()方法,该方法更新了ActualHeight和ActualWidth var viewbox = new Viewbox {

在呈现文本块之前,我需要知道它的大小。 我已经经历了这些,但它不起作用(可能是我做错了什么)。 我的Textblock绑定到ViewModel中的属性,在代码隐藏中,我正在监视文本更改事件

XAML:

试试这个:

调用Measure(),然后调用Arrange(),然后更新ActualWidth和ActualHeight


我也有同样的问题。我调用了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;