• wpf combox样式自定义


    wpf   combox原生的控件样式 非常的强大,而且支持自动完成、下拉单选、下拉方向、下拉框可定义大小等。

    一个原生的combox的样式是这样子的:

     在某些时候,根据设计的需要,combox样式需要更改,以下是我根据自己理解所写的combox自定义的样式。这个样式是由ToggleButton和ComboBox组成,先展示一下我改变之后的combox的样式。

    我这是为了区分所以设置了不同的颜色,颜色可以根据自己的喜欢改变,话不多说,先展示ToggleButton的代码。

    <!--Combox右边button-->

            <Style x:Key="ComboBoxReadonlyToggleButton" TargetType="ToggleButton">
                <Setter Property="IsTabStop" Value="false" />
                <Setter Property="ClickMode" Value="Press" />
                <Setter Property="MinHeight" Value="22"></Setter>
                <Setter Property="MinWidth" Value="80"></Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ToggleButton">
                            <Grid>
                                <Border x:Name="Background" BorderBrush="#787878"
                                    BorderThickness="1"  Background="#198B53">
                                    <Path x:Name="Path" Height="Auto" Margin="0,0.082,0,8.859" Width="Auto"
                                        Stretch="Fill" Stroke="{x:Null}" StrokeLineJoin="Round"
                                        StrokeThickness="1"
                                        Data="M0,3 C0,1.3431457 1.3431457,0 3,0 L129,0 C130.65686,0 132,1.3431457 132,3 L132,13.853975 C86.718803,0.055481441 26.160202,27.400364 0,11.585506 z">
                                        <Path.Fill>
                                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                                <!--combox背景色#198B53-->
                                                <GradientStop Color="#198B53" Offset="0.113" />
                                                <GradientStop Color="#198B53" Offset="1" />
                                            </LinearGradientBrush>
                                        </Path.Fill>
                                    </Path>
                                </Border>
                                <!--倒三角的颜色#0099ff-->
                                <Path Height="10" x:Name="Path1" HorizontalAlignment="Right"
                                    VerticalAlignment="Center" Margin="5,0,7,0" Width="10"
                                    Fill="#0099ff" Stretch="Fill" Stroke="#0099ff"
                                    Data="M0.5,0.5 L9.5,0.5 L5.0625,9.5 L5.0625,9.5 z" />
                            </Grid>
    
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <!--移入时按钮颜色 图案颜色 背景颜色 锯齿颜色-->
                                    <Setter TargetName="Path1" Property="Fill" Value="#198B53"></Setter>
                                    <Setter TargetName="Background" Property="Background" Value="#198B53"></Setter>
                                    <Setter TargetName="Background" Property="BorderBrush" Value="#198B53"></Setter>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

    然后下面是ComboBox代码:

      <Style x:Key="DefaultComboBoxStyle" TargetType="ComboBox">
                <Setter Property="Foreground" Value="#FFFFFFFF" />
                <Setter Property="Width" Value="100"></Setter>
                <Setter Property="Height" Value="30"></Setter>
                <Setter Property="VerticalAlignment" Value="Center"></Setter>
                <Setter Property="HorizontalContentAlignment" Value="Left"></Setter>
                <Setter Property="BorderBrush" Value="#FFFFFFFF" />
                <Setter Property="BorderThickness" Value="1" />
                <Setter Property="VerticalContentAlignment" Value="Center" />
                <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
                <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
                <Setter Property="Padding" Value="4,3" />
                <Setter Property="ItemContainerStyle">
                    <Setter.Value>
                        <!--这个是下拉框的属性设置-->
                        <Style TargetType="ComboBoxItem">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="ComboBoxItem">
                                        <Border Name="Back"  Background="#525252"  BorderThickness="0,0,0,0" BorderBrush="#525252" >
                                            <ContentPresenter ContentSource="{Binding Source}"  VerticalAlignment="Center" HorizontalAlignment="Left" Margin="10,0,0,0" ></ContentPresenter>
                                        </Border>
                                        <ControlTemplate.Triggers>
                                            <Trigger Property="IsMouseOver" Value="True">
                                                <Setter TargetName="Back" Property="Background" Value="#484848"></Setter>
                                            </Trigger>
                                            <!--下拉框背景色-->
                                            <Trigger Property="IsHighlighted" Value="True">
                                                <Setter TargetName="Back" Property="Background" Value="#3A99FF"></Setter>
                                            </Trigger>
                                        </ControlTemplate.Triggers>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </Setter.Value>
                </Setter>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ComboBox">
                            <Grid x:Name="MainGrid">
                               <Popup x:Name="PART_Popup" Margin="1" Grid.Row="1" 
                                    IsOpen="{Binding Path=IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}">
                                    <Grid x:Name="Shdw" MaxHeight="{TemplateBinding MaxDropDownHeight}"
                                        MinWidth="{Binding Path=ActualWidth, ElementName=MainGrid}" >
                                        <!--下拉框的属性设置-->
                                            <!--Background -->
                                        <Border x:Name="Bordertop"   Width="100" CornerRadius="0" BorderThickness="0"  Background="#525252">
                                            <Border.Effect>
                                                <DropShadowEffect Color="Black"  BlurRadius="2" ShadowDepth="0" Opacity="1"/>
                                            </Border.Effect>
                                            <ScrollViewer Width="150">
                                                <ItemsPresenter />
                                            </ScrollViewer>
                                        </Border>
                                    </Grid>
                                </Popup>
                                <ToggleButton Style="{StaticResource ComboBoxReadonlyToggleButton}"
                                    BorderThickness="3" BorderBrush="#03ffea"   Background="{TemplateBinding Background}"
                                    IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" />
                                <!--combox字体的间距-->
                                <TextBlock Margin="10 0 0 0" 
                                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                    IsHitTestVisible="false"
                                    Text="{TemplateBinding Text}"
                                   />
                            </Grid>
                                
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
    

     

     最后在combox引用样式就大功告成啦:

    <StackPanel Margin ="0 20 0 0">
                <ComboBox   Style="{StaticResource DefaultComboBoxStyle}"  VerticalContentAlignment="Center" HorizontalContentAlignment="Left">
                    <ComboBoxItem>ComboBox1</ComboBoxItem>
                    <ComboBoxItem IsSelected =" True" >ComboBox2</ComboBoxItem>
                    <ComboBoxItem>ComboBox3</ComboBoxItem>
                </ComboBox>
    
            </StackPanel>
    

      

  • 相关阅读:
    记录一些经常被忽略的结论
    Eclipse 各种问题解决记录
    Feign 动态URL 解决记录
    Nacos 启动失败
    多git账号配置解决方案
    记一次java.lang.StackOverflowError
    StringBuilder 以及 StringBuffer默认大小与扩容
    MySQL索引背后的数据结构及原理
    我没有高并发项目经验,但是面试的时候经常被问到高并发、性能调优方面的问题,有什么办法可以解决吗?
    istio 学习之 手动注入sidecar
  • 原文地址:https://www.cnblogs.com/lovebear123/p/11912200.html
Copyright © 2020-2023  润新知