如何在WPF中设置组合框及其项的样式?

如何在WPF中设置组合框及其项的样式?,wpf,combobox,itemtemplate,Wpf,Combobox,Itemtemplate,我有一个组合框,我想与一些自定义样式样式。我成功地提供了所需的样式。在样式中,我有以下元素: 切换按钮的模板 保存组合框项目的弹出窗口 我提到的几乎所有链接都使用相同的方法。但是使用这种方法,我无法为组合框中的项目提供模板。由于某些原因,我正在定义的项模板没有用于呈现项。有人能帮我吗? 我正在粘贴一个代码示例,以明确我的问题陈述(代码中可能有错误,我只希望有一个想法继续) 如果您试图为ComboBoxItem控件提供不同的ControlTemplate,则需要将ComboBox上的ItemC

我有一个组合框,我想与一些自定义样式样式。我成功地提供了所需的样式。在样式中,我有以下元素:

  • 切换按钮的模板
  • 保存组合框项目的弹出窗口
我提到的几乎所有链接都使用相同的方法。但是使用这种方法,我无法为组合框中的项目提供模板。由于某些原因,我正在定义的项模板没有用于呈现项。有人能帮我吗? 我正在粘贴一个代码示例,以明确我的问题陈述(代码中可能有错误,我只希望有一个想法继续)


如果您试图为ComboBoxItem控件提供不同的ControlTemplate,则需要将ComboBox上的ItemContainerStyle属性设置为类似于已对父控件执行的样式,但对于ComboBoxItem。ItemTemplate定义一个DataTemplate,应用于每个项目的数据,然后将其注入到ComboBoxItem ControlTemplate中

<ComboBox Style="{StaticResource MyStyle}">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type ComboBoxItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ComboBoxItem}">
                        <Border>
                            <ContentPresenter/> <!--ItemTemplate is injected here-->
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ComboBox.ItemContainerStyle>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=SomePropertyOnMyDataObject}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>


可能是因为您没有提供combobox中引用的样式键或其他什么?嗯,combobox样式工作正常,但弹出窗口中的项目没有正确模板化。所以,我认为这个键不会有任何问题。不,我想为ComboBox本身提供一个完全不同的外观,同时为它的项提供DataTemplate。我可以试试你建议的解决方案,看看它是否能解决我的问题。无论如何,谢谢你的快速回复。
<ComboBox Style="{StaticResource MyStyle}">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="{x:Type ComboBoxItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ComboBoxItem}">
                        <Border>
                            <ContentPresenter/> <!--ItemTemplate is injected here-->
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ComboBox.ItemContainerStyle>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=SomePropertyOnMyDataObject}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>