我有一个像这样的视图树观察者:
rowsContainerVto = rowsContainerView.ViewTreeObserver;
rowsContainerVto.GlobalLayout += RowsContainerVto_GlobalLayout;
void RowsContainerVto_GlobalLayout (object sender, EventArgs e)
{
if(rowsContainerVto.IsAlive)
rowsContainerVto.GlobalLayout -= RowsContainerVto_GlobalLayout;
vW = rowsContainerView.Width;
Console.WriteLine ("\r now width is " + vW);
}
它应该做的是在视图布局后找到宽度,它完美地完成。我无法弄清楚如何阻止这种情况一次又一次地运行。
以上基本上是基于所提出的建议。这只会让应用程序崩溃。当我摆脱" IsAlive"时,循环将永远持续下去。在第一次绘制和布置之后,我似乎无法找到阻止它的方法。
答案 0 :(得分:0)
由于您的EventHandler是匿名的,因此您无法再次取消订阅,因为您没有对其进行引用。
如果你想留在相同的范围内,你可以采取以下措施:
magick_function(test_dict['a'])
res > unit_dict = {}
或者您可以将EventHandler作为方法:
EventHandler onGlobalLayout = null;
onGlobalLayout = (sender, args) =>
{
rowsContainerVto.GlobalLayout -= onGlobalLayout;
realWidth = rowsContainerView.Width;
}
rowsContainerVto.GlobalLayout += onGlobalLayout;
这只意味着private void OnGlobalLayout(sender s, EventArgs e)
{
rowsContainerVto.GlobalLayout -= OnGlobalLayout;
realWidth = rowsContainerView.Width;
}
rowsContainerVto.GlobalLayout -= OnGlobalLayout;
和rowsContainerVto
必须是类成员变量。