Доступ к свойству элемента в controltemplate в XAML - PullRequest
2 голосов
/ 07 декабря 2011

Я хочу использовать шаблонные ComboBoxItems, которые состоят из изображения и метки.Если я назначу шаблон для ComboBoxItem, могу ли я как-то установить Source-свойство изображения?Цель состоит в том, чтобы использовать один и тот же шаблон для разных ComboBoxItems, но с разными изображениями в каждом элементе.

Я также думал о привязке Image.Source-Property в шаблоне, но это не удалось, поскольку «родительский» ComboBoxItemконечно, нет Source-Property, к которому я мог бы привязаться.

Код иллюстрирует мою проблему:

    <Style x:Key="ComboBoxPictureItem" TargetType="{x:Type ComboBoxItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ComboBoxItem">
                    <StackPanel Orientation="Horizontal">
                        <Image x:Name="StatusImage" />
                        <Label x:Name="StatusLabel" Content="Green"/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <ComboBox>
        <ComboBoxItem Style="{StaticResource ResourceKey=ComboBoxPictureItem}"
-> sth. like:         StatusImage.Source="PathToMyImage.png"/>
    </ComboBox>

Спасибо!

1 Ответ

0 голосов
/ 07 декабря 2011

Вы должны использовать привязки шаблонов для раскрытия внутренних свойств, например, привязать содержимое Label к содержимому ComboBoxItem:

<Label Content="{TemplateBinding Content}"/>

Если вы теперь установите Контент вне его, он будет передан метке, вы можете сделать то же самое для изображения, но у вас могут не хватить свойств, поэтому, если вы хотите сделать вещи так, как вы могли бы наследовать от ComboBoxItem и создать больше свойства.

Здесь я не думаю, что вы действительно хотите связываться с шаблонами управления, просто используйте ItemTemplate, чтобы указать, как элементы выглядят.

...