C# 更改DataContext后立即测量所需的控件大小
我有一个自定义控件,我想在画布上渲染它。在渲染它之前,我必须首先计算它的大小。我有一段代码,我想在呈现控件之前获取它的大小:C# 更改DataContext后立即测量所需的控件大小,c#,.net,wpf,C#,.net,Wpf,我有一个自定义控件,我想在画布上渲染它。在渲染它之前,我必须首先计算它的大小。我有一段代码,我想在呈现控件之前获取它的大小: var customView = (Control)Activator.CreateInstance(viewModel.CustomViewType); customView.DataContext = viewModel; // Bindings not updated yet... I want to update them here customView.Meas
var customView = (Control)Activator.CreateInstance(viewModel.CustomViewType);
customView.DataContext = viewModel;
// Bindings not updated yet... I want to update them here
customView.Measure(new Size(double.MaxValue, double.MaxValue));
// Use customView.DesiredSize
但是,在分配DataContext
之后立即测量控件并不能及时更新绑定以获得适当的元素大小。如何确保在设置DataContext
后立即更新绑定,以便进行适当的测量
我已尝试在设置DataContext
后立即添加:
customView.Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.DataBind);
该行在WindowsBase.dll
中导致出现System.InvalidOperationException
,而没有关于出错原因的信息
更新:提出了另一个类似的问题。我认为这个答案不适合我的情况。因为我使用的是自定义视图(可以来自任何地方),所以如果可能的话,我希望避免强制每个视图符合MeasureOverride
的实现。此外,在测量之前调用dispatcher操作会产生上述错误。可能重复的