Advertisement
Guest User

WPF: ComboBox without dropdown button

a guest
Nov 21st, 2011
704
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.38 KB | None | 0 0
  1. <ComboBox>
  2. <ComboBox.Resources>
  3. <sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">0</sys:Double>
  4. </ComboBox.Resources>
  5. <ComboBoxItem>One</ComboBoxItem>
  6. <ComboBoxItem>Two</ComboBoxItem>
  7. <ComboBoxItem>Three</ComboBoxItem>
  8. </ComboBox>
  9.  
  10. xmlns:t="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
  11.  
  12. <Style x:Key="ComboBoxFocusVisual">
  13. <Setter Property="Control.Template">
  14. <Setter.Value>
  15. <ControlTemplate>
  16. <Rectangle Stroke="Black" StrokeDashArray="1 2" StrokeThickness="1" Margin="4,4,21,4" SnapsToDevicePixels="true"/>
  17. </ControlTemplate>
  18. </Setter.Value>
  19. </Setter>
  20. </Style>
  21. <LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0">
  22. <GradientStop Color="#F3F3F3" Offset="0"/>
  23. <GradientStop Color="#EBEBEB" Offset="0.5"/>
  24. <GradientStop Color="#DDDDDD" Offset="0.5"/>
  25. <GradientStop Color="#CDCDCD" Offset="1"/>
  26. </LinearGradientBrush>
  27. <SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF707070"/>
  28. <Geometry x:Key="DownArrowGeometry">M 0 0 L 3.5 4 L 7 0 Z</Geometry>
  29. <Style x:Key="ComboBoxReadonlyToggleButton" TargetType="{x:Type ToggleButton}">
  30. <Setter Property="OverridesDefaultStyle" Value="true"/>
  31. <Setter Property="IsTabStop" Value="false"/>
  32. <Setter Property="Focusable" Value="false"/>
  33. <Setter Property="ClickMode" Value="Press"/>
  34. <Setter Property="Template">
  35. <Setter.Value>
  36. <ControlTemplate TargetType="{x:Type ToggleButton}">
  37. <t:ButtonChrome x:Name="Chrome" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}">
  38. <!-- Remove ToggleButton appearance; we still need the ToggleButton because it displays the content.
  39. <Grid HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">
  40. <Path x:Name="Arrow" Fill="Black" HorizontalAlignment="Center" Margin="3,1,0,0" VerticalAlignment="Center" Data="{StaticResource DownArrowGeometry}"/>
  41. </Grid>
  42. -->
  43. </t:ButtonChrome>
  44. <ControlTemplate.Triggers>
  45. <Trigger Property="IsChecked" Value="true">
  46. <Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
  47. </Trigger>
  48. <!-- Remove ToggleButton appearance trigger
  49. <Trigger Property="IsEnabled" Value="false">
  50. <Setter Property="Fill" TargetName="Arrow" Value="#AFAFAF"/>
  51. </Trigger>
  52. -->
  53. </ControlTemplate.Triggers>
  54. </ControlTemplate>
  55. </Setter.Value>
  56. </Setter>
  57. </Style>
  58. <LinearGradientBrush x:Key="TextBoxBorder" EndPoint="0,20" StartPoint="0,0" MappingMode="Absolute">
  59. <GradientStop Color="#ABADB3" Offset="0.05"/>
  60. <GradientStop Color="#E2E3EA" Offset="0.07"/>
  61. <GradientStop Color="#E3E9EF" Offset="1"/>
  62. </LinearGradientBrush>
  63. <Style x:Key="ComboBoxEditableTextBox" TargetType="{x:Type TextBox}">
  64. <Setter Property="OverridesDefaultStyle" Value="true"/>
  65. <Setter Property="AllowDrop" Value="true"/>
  66. <Setter Property="MinWidth" Value="0"/>
  67. <Setter Property="MinHeight" Value="0"/>
  68. <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
  69. <Setter Property="Template">
  70. <Setter.Value>
  71. <ControlTemplate TargetType="{x:Type TextBox}">
  72. <ScrollViewer x:Name="PART_ContentHost" Background="Transparent" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
  73. </ControlTemplate>
  74. </Setter.Value>
  75. </Setter>
  76. </Style>
  77. <Style x:Key="ComboBoxToggleButton" TargetType="{x:Type ToggleButton}">
  78. <Setter Property="OverridesDefaultStyle" Value="true"/>
  79. <Setter Property="IsTabStop" Value="false"/>
  80. <Setter Property="Focusable" Value="false"/>
  81. <Setter Property="ClickMode" Value="Press"/>
  82. <Setter Property="Template">
  83. <Setter.Value>
  84. <ControlTemplate TargetType="{x:Type ToggleButton}">
  85. <t:ButtonChrome x:Name="Chrome" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" RoundCorners="false">
  86. <Path x:Name="Arrow" Fill="Black" HorizontalAlignment="Center" Margin="0,1,0,0" VerticalAlignment="Center" Data="{StaticResource DownArrowGeometry}"/>
  87. </t:ButtonChrome>
  88. <ControlTemplate.Triggers>
  89. <Trigger Property="IsChecked" Value="true">
  90. <Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
  91. </Trigger>
  92. <Trigger Property="IsEnabled" Value="false">
  93. <Setter Property="Fill" TargetName="Arrow" Value="#AFAFAF"/>
  94. </Trigger>
  95. </ControlTemplate.Triggers>
  96. </ControlTemplate>
  97. </Setter.Value>
  98. </Setter>
  99. </Style>
  100. <ControlTemplate x:Key="ComboBoxEditableTemplate" TargetType="{x:Type ComboBox}">
  101. <Grid x:Name="Placement" SnapsToDevicePixels="true">
  102. <Grid.ColumnDefinitions>
  103. <ColumnDefinition Width="*"/>
  104. <ColumnDefinition Width="Auto"/>
  105. </Grid.ColumnDefinitions>
  106. <Popup x:Name="PART_Popup" AllowsTransparency="true" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Placement="Bottom" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Grid.ColumnSpan="2">
  107. <t:SystemDropShadowChrome x:Name="Shdw" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{Binding ActualWidth, ElementName=Placement}" Color="Transparent">
  108. <Border x:Name="DropDownBorder" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1">
  109. <ScrollViewer>
  110. <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.DirectionalNavigation="Contained"/>
  111. </ScrollViewer>
  112. </Border>
  113. </t:SystemDropShadowChrome>
  114. </Popup>
  115. <t:ListBoxChrome x:Name="Border" Grid.ColumnSpan="2" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" RenderFocused="{TemplateBinding IsKeyboardFocusWithin}" RenderMouseOver="{TemplateBinding IsMouseOver}"/>
  116. <TextBox x:Name="PART_EditableTextBox" Margin="{TemplateBinding Padding}" Style="{StaticResource ComboBoxEditableTextBox}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" IsReadOnly="{Binding IsReadOnly, RelativeSource={RelativeSource TemplatedParent}}"/>
  117. <!-- Remove the ToggleButton button; now you make the textbox clickable....
  118. <ToggleButton Style="{StaticResource ComboBoxToggleButton}" Grid.Column="1" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"/>
  119. -->
  120. </Grid>
  121. <ControlTemplate.Triggers>
  122. <Trigger Property="IsKeyboardFocusWithin" Value="true">
  123. <Setter Property="Foreground" Value="Black"/>
  124. </Trigger>
  125. <Trigger Property="IsDropDownOpen" Value="true">
  126. <Setter Property="RenderFocused" TargetName="Border" Value="true"/>
  127. </Trigger>
  128. <Trigger Property="HasItems" Value="false">
  129. <Setter Property="Height" TargetName="DropDownBorder" Value="95"/>
  130. </Trigger>
  131. <Trigger Property="IsEnabled" Value="false">
  132. <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
  133. <Setter Property="Background" Value="#FFF4F4F4"/>
  134. </Trigger>
  135. <Trigger Property="IsGrouping" Value="true">
  136. <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
  137. </Trigger>
  138. <Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true">
  139. <Setter Property="Margin" TargetName="Shdw" Value="0,0,5,5"/>
  140. <Setter Property="Color" TargetName="Shdw" Value="#71000000"/>
  141. </Trigger>
  142. </ControlTemplate.Triggers>
  143. </ControlTemplate>
  144. <Style x:Key="ButtonlessComboBoxStyle" TargetType="{x:Type ComboBox}">
  145. <Setter Property="FocusVisualStyle" Value="{StaticResource ComboBoxFocusVisual}"/>
  146. <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
  147. <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
  148. <Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/>
  149. <Setter Property="BorderThickness" Value="1"/>
  150. <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
  151. <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
  152. <Setter Property="Padding" Value="4,3"/>
  153. <Setter Property="Template">
  154. <Setter.Value>
  155. <ControlTemplate TargetType="{x:Type ComboBox}">
  156. <Grid x:Name="MainGrid" SnapsToDevicePixels="true">
  157. <Grid.ColumnDefinitions>
  158. <ColumnDefinition Width="*"/>
  159. <ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/>
  160. </Grid.ColumnDefinitions>
  161. <Popup x:Name="PART_Popup" Margin="1" AllowsTransparency="true" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Placement="Bottom" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Grid.ColumnSpan="2">
  162. <t:SystemDropShadowChrome x:Name="Shdw" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{Binding ActualWidth, ElementName=MainGrid}" Color="Transparent">
  163. <Border x:Name="DropDownBorder" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1">
  164. <ScrollViewer CanContentScroll="true">
  165. <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.DirectionalNavigation="Contained"/>
  166. </ScrollViewer>
  167. </Border>
  168. </t:SystemDropShadowChrome>
  169. </Popup>
  170. <ToggleButton Style="{StaticResource ComboBoxReadonlyToggleButton}" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" Grid.ColumnSpan="2" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"/>
  171. <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" IsHitTestVisible="false" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Content="{TemplateBinding SelectionBoxItem}" ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}" ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"/>
  172. </Grid>
  173. <ControlTemplate.Triggers>
  174. <Trigger Property="HasDropShadow" SourceName="PART_Popup" Value="true">
  175. <Setter Property="Margin" TargetName="Shdw" Value="0,0,5,5"/>
  176. <Setter Property="Color" TargetName="Shdw" Value="#71000000"/>
  177. </Trigger>
  178. <Trigger Property="HasItems" Value="false">
  179. <Setter Property="Height" TargetName="DropDownBorder" Value="95"/>
  180. </Trigger>
  181. <Trigger Property="IsEnabled" Value="false">
  182. <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
  183. <Setter Property="Background" Value="#FFF4F4F4"/>
  184. </Trigger>
  185. <Trigger Property="IsGrouping" Value="true">
  186. <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
  187. </Trigger>
  188. </ControlTemplate.Triggers>
  189. </ControlTemplate>
  190. </Setter.Value>
  191. </Setter>
  192. <Style.Triggers>
  193. <Trigger Property="IsEditable" Value="true">
  194. <Setter Property="BorderBrush" Value="{StaticResource TextBoxBorder}"/>
  195. <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
  196. <Setter Property="IsTabStop" Value="false"/>
  197. <Setter Property="Padding" Value="3"/>
  198. <Setter Property="Template" Value="{StaticResource ComboBoxEditableTemplate}"/>
  199. </Trigger>
  200. </Style.Triggers>
  201. </Style>
  202.  
  203. <ComboBox HorizontalAlignment="Left" Width="120" Style="{DynamicResource ButtonlessComboBoxStyle}">
  204. <ComboBox.Items>
  205. <ComboBoxItem>One</ComboBoxItem>
  206. <ComboBoxItem>Two</ComboBoxItem>
  207. <ComboBoxItem>Three</ComboBoxItem>
  208. </ComboBox.Items>
  209. </ComboBox>
  210.  
  211. <ComboBox HorizontalAlignment="Left" Width="120" IsEditable="True" Style="{DynamicResource ButtonlessComboBoxStyle}">
  212. <ComboBox.Items>
  213. <ComboBoxItem>One</ComboBoxItem>
  214. <ComboBoxItem>Two</ComboBoxItem>
  215. <ComboBoxItem>Three</ComboBoxItem>
  216. </ComboBox.Items>
  217. </ComboBox>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement