Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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_Actualwidth - Fatal编程技术网

C# 查找用户控件的实际宽度

C# 查找用户控件的实际宽度,c#,wpf,xaml,actualwidth,C#,Wpf,Xaml,Actualwidth,我正在使用XAML/C处理一些布局问题,由于某些原因,我无法使用SizeToContent=“Width”选项,但我希望在某些情况下模拟它。我有一个用户控件位于扩展器内部,我希望能够获得该用户控件的实际宽度,以便在扩展器展开时,我可以相应地增加GridColumn和窗口的大小。因为扩展器以IsExpanded=“False”开头,所以ActualWidth属性的读数为0.0。是否有任何方法可以获得用户控件的实际宽度,就好像它完全可见并且SizeToContent=“Width”有效一样 我一直在

我正在使用XAML/C处理一些布局问题,由于某些原因,我无法使用
SizeToContent=“Width”
选项,但我希望在某些情况下模拟它。我有一个用户控件位于扩展器内部,我希望能够获得该用户控件的实际宽度,以便在扩展器展开时,我可以相应地增加GridColumn和窗口的大小。因为扩展器以
IsExpanded=“False”
开头,所以ActualWidth属性的读数为0.0。是否有任何方法可以获得用户控件的实际宽度,就好像它完全可见并且
SizeToContent=“Width”
有效一样


我一直在拼命地想知道如何在不硬编码实际值的情况下计算这个宽度
DesiredSize.Width
RenderedSize.Width
在扩展器折叠时也都返回0.0

我相信如果您运行
度量
排列
传递,传递无限
大小
,您将能够获得
DesiredSize

var infiniteSize = new Size(double.PositiveInfinity, double.PositiveInfinity);
control.Measure(infiniteSize);
control.Arrange(新的Rect(无穷大))

更正:
如评论中所述,只需使用无限大小调用
Measure()
,就可以实现这一目的;不要使用
Arrange()

如果您已更改了
INotifyPropertyChanged
是否可以附加一个
DataTrigger
并将其绑定到
ActualWidth
以便在更新绑定时,您的属性也是如此?作为注释输入,因为遗憾的是没有时间测试,但似乎是合法的选择。@ChrisW。我会记住这个建议,但我不确定这种方法是否适合这种情况。抛出系统。InvalidOperationException:无法对无限大的UIElement或NaNJay调用arrange,这在不需要调用arrange()的情况下运行良好。在测量之后,我能够从DesiredSize属性中拉出完全扩展的宽度和高度