2009-03-29 2 views
2

Я создаю пользовательский элемент ItemsControl в Silverlight, который (между прочим) позволяет элементам отображаться горизонтально или вертикально во время выполнения. Как связать свойство Orientation элемента ItemsPanel с свойством Orientation моего родительского элемента управления? Я пробовал использовать TemplateBinding (который работает внутри ControlTemplate), но, похоже, не работает внутри ItemsPanelTemplate, я делаю что-то неправильно?TemplateBinding in ItemsPanelTemplate

<Style TargetType="CustomItemsControl"> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="{TemplateBinding Orientation}" /> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

ответ

7

Используйте RelativeSource:

<Style TargetType="CustomItemsControl"> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="{Binding Orientation, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type CustomItemsControl}}}" /> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Edit после комментариев: Silverlight не поддерживает RelativeSource, но this post Колин Эберхардта объясняет, как он может быть реализован вручную.

+0

Привет Кент, спасибо за ваш ответ, к сожалению, я использую Silverlight, который, похоже, не поддерживает использование RelativeSource. Извиняясь за путаницу, я обновил свой первоначальный вопрос, чтобы уточнить, что я использую Silverlight. –

+0

Хм, вижу. В этом случае вы можете проверить этот пост: http://www.scottlogic.co.uk/blog/wpf/2009/02/relativesource-binding-in-silverlight/ –

+0

+1: Я использую WPF и имела ту же проблему; ваш ответ был действительно полезен. – Heinzi

Смежные вопросы