1

我有一个 ComboBox,我想用一些自定义样式对其进行样式设置。我成功地提供了所需的样式。在风格中,我有以下元素:

  • 切换按钮的模板
  • 包含 ComboBox 项目的弹出窗口

我提到的几乎所有链接都使用了相同的方法。但是使用这种方法,我无法为 ComboBox 中的项目提供模板。由于某种原因,我定义的项目模板没有用于渲染项目。有人可以帮我吗?我正在粘贴一个代码示例以使我的问题陈述清楚(代码中可能有错误,我只是想要一个想法继续进行)。

 <Window.Resources>
    <Style x:Key="{x:Type ComboBox}" TargetType="{x:Type ComboBox}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Grid>
                        <ToggleButton Template="{StaticResource MyToggleButton}"/>
                        <Popup >
                            <StackPanel>
                                <Border/>
                                <ItemsPresenter/>
                            </StackPanel>
                        </Popup>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <ComboBox Style="{StaticResource MyStyle}">
        <ComboBox.ItemTemplate>
            <DataTemplate>

            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
</Grid>
4

1 回答 1

2

如果您尝试为 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>
于 2013-02-04T18:29:53.980 回答