#silverlight-4.0
#silverlight-4.0
Вопрос:
У меня есть
элементы управления :
ControlX: IControlX и Controlly:IControlY
ControlZ обладает свойством списка ControlX
Интерфейсы :
IControlX и IControlY:IControlX
Теги, которые я получаю, это:
<ControlZ>
<ControlY>
<ControlX></ControlX>
<ControlX></ControlX>
</ControlY>
</ControlZ>
Здесь я могу получить доступ к элементам управления в списке, но не могу получить доступ к управлению X.
Но если я изменю последовательность тегов как :
<ControlZ>
<ControlY> </ControlY>
<ControlX></ControlX>
<ControlX></ControlX>
</ControlZ>
Я могу получить все объекты в списке.
Но это нелогично, поэтому мне нужно поддерживать последовательность тегов.
Не могли бы вы, пожалуйста, подсказать мне. Как я могу получить доступ к внутренним тегам?
Спасибо
Ответ №1:
Вы не можете этого сделать. XAML не позволяет вам получать доступ к свойствам properties, если вы не инициализируете их в XAML.
<Control:MyControl>
<Control:MyControl.Property1>
<!-- Assuming that Property1 is of type MyOtherControl -->
<Control:MyOtherControl Property="somevalue" />
</Control:MyControl.Property1>
</Control:MyControl>
Ответ №2:
Чтобы задать значение свойства Property1
, вы должны сначала создать его экземпляр. Допустим, что Property1
операционная система того типа Property1Type
, который существует в том же пространстве имен, и тип внутреннего свойства ( Property
) — это InnerPropertyType
, которое также находится в том же пространстве имен. Ваш код должен быть чем-то вроде:
<Control:MyControl>
<Control:MyControl.Property1>
<Control:Property1Type>
<Control:Property1Type.Property>
<Control:InnerPropertyType />
</Control:Property1Type.Property>
</Control:Property1Type>
</Control:MyControl.Property1>
</Control:MyControl>
это похоже на, например:
<ListBox>
<ListBox.BorderBrush>
<ImageBrush>
<ImageBrush.Transform>
<ScaleTransform ScaleX="5"/>
</ImageBrush.Transform>
</ImageBrush>
</ListBox.BorderBrush>
</ListBox>
Это должно решить некоторые проблемы, если другие сохраняются, пожалуйста, обновите свой вопрос 😉
Надеюсь, это поможет 🙂