Когда объявленные элементы списка XAML имеют свои свойства зависимостей?
Я создаю пользовательскую панель wpf. Чтобы помочь выложить дочерние элементы, он использует вторичный список (похожий на Grid.RowDefinitions или Grid.ColumnDefinitions), который я называю «макетами». Каждый макет имеет пару зависимых свойств, а дочерние элементы используют прикрепленное свойство, чтобы определить, где они размещены, как показано ниже.
<Panel>
<Panel.Layouts>
<Layout/>
<Layout Attachment="Right"/>
<Layout Attachment="Left" Target="0"/>
</Panel.Layouts>
<ChildItem Panel.Layout="0"/>
<ChildItem Panel.Layout="1"/>
<ChildItem Panel.Layout="2"/>
<Panel/>
Очевидно, что вещи немного упрощен, но длинный рассказ короткий: Мне нужно обрабатывать макеты, как они будут добавлены, прежде чем процесс «Упорядочить» может произойти. Я создал пользовательскую коллекцию, и я могу видеть элементы по мере их добавления (см. Код ниже), но элементы имеют свои свойства по умолчанию.
LayoutCollection: IList
{
public int IList.Add(object value)
{
// When first starting, this line always returns the default value, not the one set in XAML
Attachment a = (value as Layout).Attachment;
// Other code happens below...
}
}
Однако, когда я смотрю на коллекцию после инициализации панели, все объекты установлены правильно. Это подводит меня к моему вопросу:
Вопрос
На каком этапе в процессе между XAML и инициализации панели делать элементы получают назначены их свойства, и как они назначены? Мне нужно как-то подключиться к этому и запустить немного кода.
Нужно ли перехватывать ДО или ПОСЛЕ того, что значения, установленные в приложении, установлены/использованы? Если речь идет об управлении устройством вообще, вы можете посмотреть https://msdn.microsoft.com/de-de/library/system.windows.frameworkelement.arrangeoverride(v=vs.110).aspx – MABVT
Прикрепленные объекты ('Panel.Layout' - это прикрепленное свойство) имеют обратный вызов, который вы можете использовать, чтобы узнать, когда значение установлено/изменено. Вы можете переопределить этот обратный вызов в своем классе Window. Было бы неплохо, если бы вы показывали код, в котором вы создаете эти прикрепленные свойства, а также конкретную точку, вызывающую проблему. Тогда это должно быть легко исправить. См. [This] (http://stackoverflow.com/a/31857866/1997232). – Sinatr
Почему бы не обработать макеты в MeasureOverride, прежде чем фактически измерить и затем упорядочить дочерние элементы? – Clemens