Связывание шаблона в ItemsPanelTemplate - PullRequest
2 голосов
/ 29 марта 2009

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

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

1 Ответ

7 голосов
/ 29 марта 2009

Использовать 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>

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

...