在XAML中的controltemplate中访问元素的属性

时间:2011-12-07 09:19:45

标签: wpf xaml wpf-controls controltemplate

我想使用模板化的ComboBoxItems,它包含一个Image和一个Label。如果我将模板分配给ComboBoxItem,我可以以某种方式设置图像的Source-Property吗?目标是为不同的ComboBoxItem使用相同的模板,但在每个Item中使用不同的图片。

我还想过在模板中绑定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 :(得分:0)

您应该使用模板绑定来公开内部属性,例如将Label的内容绑定到ComboBoxItem的内容:

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

如果你现在设置外部的内容被转移到标签,你可以为图像做同样的事情,你可能会用尽属性,如果你想做的事情你可以继承ComboBoxItem并创建更多属性。

在这里,我认为您不想真正搞乱控制模板,只需使用ItemTemplate来指定项目的外观。