在XAML中访问控件模板中元素的属性

5

我想使用模板化的ComboBoxItems,其中包括一个图像和一个标签。如果我将模板分配给ComboBoxItem,我是否可以以某种方式设置图像的Source属性?目标是在不同的ComboBoxItems中使用相同的模板,但每个项目中的图片不同。

我还考虑过在模板中绑定Image.Source属性,但这会失败,因为“父”ComboBoxItem显然没有我可以绑定到的Source属性。

下面的代码说明了我的问题:

    <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个回答

2

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

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

如果您现在将内容设置在外部,它会传递到标签中。您也可以对图像执行相同的操作,但是可能会用尽属性,因此,如果您想以这种方式进行操作,则可以从ComboBoxItem继承并创建更多属性。

在这里,我认为您不想真正操纵控件模板,只需使用ItemTemplate指定项目的外观即可。


1
使用我自己的继承自ComboBoxItem的类是一种可能的解决方案,我只是认为可能有更简单的方法。感谢您提供的ItemTemplate提示,这比使用全新的ControlTemplate更符合我的需求。我可能会像这里所示的那样使用DataTemplate来解决问题:http://msdn.microsoft.com/en-us/library/ms742521.aspx。 - schoola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接