如何设置WPF ComboBox的样式

时间:2014-09-17 09:05:18

标签: wpf combobox styles

我想修改comboBox的默认样式。所以我写了这段代码:

        <!-- ComboBox style -->
        <Style x:Key="{x:Type ComboBox}" TargetType="ComboBox">
            <Setter Property="SnapsToDevicePixels" Value="true"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ComboBox">
                        <Grid>
                            <ToggleButton Name="ToggleButton" 
                    Template="{StaticResource ComboBoxToggleButton}" 
                    IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}"
                    ClickMode="Press">
                            </ToggleButton>
                            <ContentPresenter Name="ContentSite" IsHitTestVisible="False" 
                        Content="{TemplateBinding SelectionBoxItem}"
                        ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
                        ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
                        Margin="3,3,23,3"
                            <TextBox x:Name="PART_EditableTextBox"
                        Style="{x:Null}"  Template="{StaticResource ComboBoxTextBox}" 
                        Text="{TemplateBinding Text}"
                        Foreground="DarkBlue"
                        IsReadOnly="{TemplateBinding IsReadOnly}"/>
                            <Popup  Name="Popup" Placement="Bottom"
                        IsOpen="{TemplateBinding IsDropDownOpen}"
                        AllowsTransparency="True"  Focusable="False"
                        PopupAnimation="Slide">
                                <Grid  Name="DropDown"
                          SnapsToDevicePixels="True" MinWidth="{TemplateBinding ActualWidth}"
                          MaxHeight="{TemplateBinding MaxDropDownHeight}">
                                    <Border  x:Name="DropDownBorder"/>
                                    <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                                        <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
                                    </ScrollViewer>
                                </Grid>
                            </Popup>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
            </Style.Triggers>
        </Style>

这是我在XAML文件中的comboBox,但我不知道如何设置我的风格:

<ComboBox x:Name="nomiGiocatori" /> 

我如何应用此ComboBox的新Stype?

Reguards

2 个答案:

答案 0 :(得分:4)

你的风格有点不对,应该是

<Style x:Key="YourButtonStyle" TargetType="{x:Type Button}">

在你的xaml代码中

<ComboBox x:Name="nomiGiocatori" Style="{StaticResource YourButtonStyle}"/> 

如果您将样式定义为

,则可以将其应用于所有组合框
<Style TargetType="{x:Type Button}" BasedOn="Button"/>

然后你不必对你的xaml做任何事情。

This answer describes a similar issue.

希望它有所帮助,

了Stian

答案 1 :(得分:0)

谢谢您的建议,但我认为您无法将目标类型为Button的样式应用于ComboBox对象。我已经审查了您的建议,但在WFP实施中的任何地方都无法使用。即使您使用BasedOn =“ Button”或“ ComboBox”。编译器生成错误消息TypeConverter,表示“样式”不支持从字符串转换。

ComboBox基本上分为三个部分:ComboBox,ComboBoxItems和ToggleButton元素。要覆盖默认设置,您必须首先以属性类型为模板定义这三种样式,然后将OverridesDefaultStyle设置为true。