Пользовательские элементы управления Xaml

#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>
  

Это должно решить некоторые проблемы, если другие сохраняются, пожалуйста, обновите свой вопрос 😉

Надеюсь, это поможет 🙂