Вы можете вызвать свой пользовательский код ПОСЛЕ вызова base.ArrangeOverride () в реализации ArrangeOverride вашего окна:
protected override Size ArrangeOverride(Size arrangeBounds)
{
Size temp = base.ArrangeOverride(arrangeBounds);
// custom code goes here!
return temp;
}
(я только что протестировал, и это работает: пользовательский код выполняется после ArrangeOverride любогодочерний элемент управления в окне)
EDIT: следует проверенному и рабочему примеру:
В window1.xaml.cs:
[...]
protected override Size ArrangeOverride(Size arrangeBounds)
{
Trace.TraceInformation("Window1.ArrangeOverride START");
Size temp = base.ArrangeOverride(arrangeBounds);
Trace.TraceInformation("Window1.ArrangeOverride END");
return temp;
}
[...]
В myUserControl.xaml.cs:
[...]
protected override Size ArrangeOverride(Size arrangeBounds)
{
Trace.TraceInformation("{0}.ArrangeOverride START", Tag);
Size s = base.ArrangeOverride(arrangeBounds);
Trace.TraceInformation("{0}.ArrangeOverride END", Tag);
return s;
}
[...]
В window1.xaml:
[...]
<local:myUserControl Tag="FirstLevelControl">
<StackPanel>
<local:myUserControl Tag="SecondLevelControl_1">
<TextBlock>First</TextBlock>
</local:myUserControl>
<local:myUserControl Tag="SecondLevelControl_2">
<TextBlock>Second</TextBlock>
</local:myUserControl>
</StackPanel>
</local:myUserControl>
[...]
И, наконец, вывод после выполнения:
[...]
Test.vshost.exe Information: 0 : Window1.ArrangeOverride START
Test.vshost.exe Information: 0 : FirstLevelControl.ArrangeOverride START
Test.vshost.exe Information: 0 : SecondLevelControl_1.ArrangeOverride START
Test.vshost.exe Information: 0 : SecondLevelControl_1.ArrangeOverride END
Test.vshost.exe Information: 0 : SecondLevelControl_2.ArrangeOverride START
Test.vshost.exe Information: 0 : SecondLevelControl_2.ArrangeOverride END
Test.vshost.exe Information: 0 : FirstLevelControl.ArrangeOverride END
Test.vshost.exe Information: 0 : Window1.ArrangeOverride END
[...]
Это демонстрирует, что строка кода междуtemp = base.ArrangeOverride
и return temp
всегда выполняются ПОСЛЕ всего кода во всех вложенных пользовательских элементах управления методом ArrangeOverride.Я не пытался отслеживать выполнение Arrange встроенных элементов управления, но я полагаю, что они ведут себя одинаково.