我有一个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>
答案 0 :(得分:1)
如果您尝试为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>