wpf Combobox没有黑三角,鼠标移上去改变样式

原创 2015年07月09日 14:19:37

1.自己设计样式的效果

默认状态 

下拉框     


2.样式文件

 <Geometry x:Key="DownArrowGeometry">M 0 0 L 3.5 4 L 7 0 Z</Geometry>
        <Style x:Key="ComboBoxReadonlyToggleButton" TargetType="{x:Type ToggleButton}">
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="IsTabStop" Value="false"/>
            <Setter Property="Focusable" Value="false"/>
            <Setter Property="ClickMode" Value="Press"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ToggleButton}">
                        <Microsoft_Windows_Themes:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" 
                                                        SnapsToDevicePixels="true">

                            <!--RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}"-->

                            <!--<Grid HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">                            <Path x:Name="Arrow" Data="{StaticResource DownArrowGeometry}" Fill="Black" HorizontalAlignment="Center" Margin="3,1,0,0" VerticalAlignment="Center"/>                        </Grid>-->
                        </Microsoft_Windows_Themes:ButtonChrome>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key="ComboBoxStyle1" TargetType="{x:Type ComboBox}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ComboBox}">
                        <Grid x:Name="MainGrid" SnapsToDevicePixels="true">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/>
                            </Grid.ColumnDefinitions>
                            <Popup x:Name="PART_Popup" AllowsTransparency="true" Grid.ColumnSpan="2" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Margin="1"                               PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom">
                                <Microsoft_Windows_Themes:SystemDropShadowChrome x:Name="Shdw" Color="Transparent" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{Binding ActualWidth, ElementName=MainGrid}">
                                    <Border x:Name="DropDownBorder" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">
                                        <ScrollViewer x:Name="DropDownScrollViewer">
                                            <Grid RenderOptions.ClearTypeHint="Enabled">
                                                <Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
                                                    <Rectangle x:Name="OpaqueRect" Fill="#252525" Height="{Binding ActualHeight, ElementName=DropDownBorder}" Width="{Binding ActualWidth, ElementName=DropDownBorder}"/>
                                                </Canvas>
                                                <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                            </Grid>
                                        </ScrollViewer>
                                    </Border>
                                </Microsoft_Windows_Themes:SystemDropShadowChrome>
                            </Popup>
                            <ToggleButton BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" Grid.ColumnSpan="2" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"                                      Style="{StaticResource ComboBoxReadonlyToggleButton}"></ToggleButton>
                            <ContentPresenter ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}" Content="{TemplateBinding SelectionBoxItem}"                                          ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="false"                                          Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"></ContentPresenter>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

          
3.总结

   在项目中应用wpf一年多后,才来认真研究样式的问题。以前都是略过啊略过。现在用Blend重写样式,才发觉随心所欲的感觉真好~!

1. ToggleButton一直弄不懂是什么东西,网上的解释好抽象。体现在Combobox上原来是


红色方框内的点击效果

2.  代码中注释掉的

RenderMouseOver,RenderPresse

这个是取消了鼠标移上去、按下去的效果

默认是这样的



注释掉的<Grid... 是黑色倒三角


如果应用到wpf工程,先要加引用Microsoft.Expression.Drawing.dll


wpf Combobox没有黑三角,鼠标移上去改变样式

1.自己设计样式的效果 默认状态 下拉框     2.样式文件  Geometry x:Key="DownArrowGeometry">M 0 0 L 3.5 4 L 7 0 ZGeomet...
  • ff1990723
  • ff1990723
  • 2015年07月09日 14:19
  • 575

WPF ComboBox样式

WPF ComboBox样式
  • lvguoshan
  • lvguoshan
  • 2015年10月16日 14:37
  • 9427

WPF Button 鼠标移动改变样式

  • kllxyu
  • kllxyu
  • 2015年08月06日 12:31
  • 1774

WPF 自定义鼠标指针图片

WPF中自定义鼠标光标图片
  • hjnth
  • hjnth
  • 2017年02月22日 13:25
  • 998

C# WinForm ComboBox下拉菜单如何切换鼠标移动到某项的高亮背景色

C# WinForm ComboBox下拉菜单如何切换鼠标移动到某项的高亮背景色
  • chji00
  • chji00
  • 2016年09月04日 13:39
  • 981

用WPF实现鼠标移开窗口自动隐藏

用WPF实现鼠标移开窗口自动隐藏1,卷首语WPF是一种相当柔性的可配置的UI平台,所以,基本上用标准控件就可以实现相当多的需求。然而,要实现更复杂的UI的话,还是需要自己来订制控件。在这篇文章里,主要...
  • starr0110
  • starr0110
  • 2008年06月12日 22:32
  • 1776

简单的鼠标移出移入样式改变

简单的鼠标移出移入样式改变
  • z__lin
  • z__lin
  • 2017年09月06日 21:08
  • 270

WPF中ComboBox控件显示的样式设置

1、首先需要给ComboBox绑定一个集合 2、集合中的每一项是一个对象,比如是一个Student对象,需要在该类中添加一个静态DataTemplateKey类型的属性(必须是静态的)。如下:pub...
  • hxfhq1314
  • hxfhq1314
  • 2016年11月03日 16:47
  • 2221

鼠标移动实现样式改变

无标题文档 ul{ margin-top:50px; list-style-type:none; } li{ width:100px; line-height:40px; height:4...
  • ios0213
  • ios0213
  • 2016年07月24日 20:57
  • 342

WPF Image鼠标进入后改变图片

以下代码需要放在窗体的resource中。image控件需要设置为此样式
  • zhengxiaotaozz
  • zhengxiaotaozz
  • 2017年03月22日 17:39
  • 1031
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:wpf Combobox没有黑三角,鼠标移上去改变样式
举报原因:
原因补充:

(最多只允许输入30个字)