通知公告
标准控件ComboBox的资源样式
日期:2015-12-15  发布人:admin  浏览量:273

1.简介
  ComboBox是类似Window标准的组合框,不过功能比Window标准的组合框强大,外观可以任意定制,包括下拉列表。
2.属性
2.1IsEditable
  类型:Boolean;
  功能:可编辑属性;
  说明:如果为false,则不可输入,而且可通过此属性来触发ComboBox的外观样式变化。
2.2IsDropDownOpen
  类型:Boolean;
  功能:下拉框是否打开属性;
  说明:如果为true,下拉框显示,而且可通过此属性来触发ComboBox的外观样式变化。
2.3Text
  类型:String;
  功能:组合框文本内容;
  说明:如果IsEditable为true时,此属性会跟随编辑框内容变化。
2.4SelectionBoxItem
  类型:Object;
  功能:选择的项对象;
  说明:组合框项对象选中时会更新这个属性值。
3.事件

4.标准的资源样式
  下面是一个标准的ComboBox样式定义:
    <?xml encoding="utf-8" ?>
<ResourceDictionary Author="汪荣(QQ:386666951)" >
    <SolidColorBrush x:Key="comboboxitem_bk_hot" Color="#BDBDBD" />
    <SolidColorBrush x:Key="comboboxexpand_bk_normal" Color="#525252" />
    <SolidColorBrush x:Key="combobox_bk_normal" Color="#333333" />
    <SolidColorBrush x:Key="combobox_br_normal" Color="#353535" />
    <SolidColorBrush x:Key="combobox_fg_normal" Color="White" />
    <SolidColorBrush x:Key="comboboxpopup_bk_normal" Color="#333333" />
    <SolidColorBrush x:Key="comboboxpopup_br_normal" Color="#353535" />

    <Integer x:Key="comboboxpopup_thickness" Value="1" />
    
    <!--ComboBox样式定义-->
    <Style TargetType="ComboBoxItem">
        <Setter Property="MinHeight" Value="18" />
        <Setter Property="Foreground" Value="White" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ComboBoxItem">
                    <Border Background="{TemplateBinding Background}" 
                            BorderThickness="{TemplateBinding BorderThickness}" 
                            BorderBrush="{TemplateBinding BorderBrush}" >
                        <ContentPresenter Margin="2" HorizontalAlignment="Left" VerticalAlignment="Center" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True" >
                <Setter Property="Background" Value="{StaticResource comboboxitem_bk_hot}" />
            </Trigger>
        </Style.Triggers>
    </Style>

    <Style x:Key="ComboBoxTransparentButtonStyle" TargetType="ToggleButton">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ToggleButton">
                    <Border Background="{StaticResource comboboxexpand_bk_normal}" CornerRadius="3" >
                        <Path Data="M 0 0 L 7 0 L 3.5 5 Z" Fill="White" StrokeThickness="0" VerticalAlignment="Center" HorizontalAlignment="Center" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="ComboBox">
        <Setter Property="Foreground" Value="{StaticResource combobox_fg_normal}" />
        <Setter Property="Background" Value="{StaticResource combobox_bk_normal}" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="Padding" Value="2" />
        <Setter Property="BorderBrush" Value="{StaticResource combobox_br_normal}" />
        <Setter Property="HorizontalContentAlignment" Value="Left" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate x:Key="ComboBoxTemplate" TargetType="ComboBox">
                    <Grid>
                        <Border CornerRadius="4" Background="{TemplateBinding}" BorderThickness="{TemplateBinding}" BorderBrush="{TemplateBinding}">
                            <DockPanel Orientation="Horizontal" >
                                <ToggleButton Name="PART_Down" TabIndex="{TemplateBinding}" MinWidth="16" DockPanel.Dock="Right"
                                              IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
                                              Style="{StaticResource ComboBoxTransparentButtonStyle}" />
                                <ContentPresenter ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" Content="{TemplateBinding SelectionBoxItem}"
                                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}"
                                                  Control.Foreground="White" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                                <TextBox Name="PART_TextBox" TabIndex="{TemplateBinding}" BorderThickness="0" Background="{TemplateBinding}" Visibility="{Binding Path=TemplatedParent.IsEditable,Converter=BToV}" Margin="0,1,1,1" />
                            </DockPanel>
                        </Border>
                        <Popup Name="PART_Popup" AllowsTransparency="True" Focusable="False" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Placement="Bottom">
                            <Border Name="DropDownBorder" 
                                    BorderThickness="{StaticResource comboboxpopup_thickness}" 
                                    BorderBrush="{StaticResource comboboxpopup_br_normal}" 
                                    Background="{StaticResource comboboxpopup_bk_normal}">
                                <ScrollViewer Name="DropDownScrollViewer">
                                    <ItemsPresenter Name="ItemsPresenter" />
                                </ScrollViewer>
                            </Border>
                        </Popup>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate TargetType="ItemsPresenter" >
                    <VirtualizingStackPanel />
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>

        <Style.Triggers>
            <Trigger Property="IsDropDownOpen" Value="True" >
                <Setter Property="Background" Value="{StaticResource combobox_bk_normal}" />
            </Trigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>