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