RadioButtonBaseStyle.xaml 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3. xmlns:hc="clr-namespace:HandyControl.Controls"
  4. xmlns:system="clr-namespace:System;assembly=mscorlib">
  5. <Style x:Key="RadioButtonBaseStyle" BasedOn="{StaticResource BaseStyle}" TargetType="RadioButton">
  6. <Setter Property="FocusVisualStyle">
  7. <Setter.Value>
  8. <Style>
  9. <Setter Property="Control.Template">
  10. <Setter.Value>
  11. <ControlTemplate>
  12. <Rectangle Margin="-4" Opacity=".6" SnapsToDevicePixels="true" Stroke="{DynamicResource SecondaryBorderBrush}" StrokeThickness="2" StrokeDashArray="1 1" RadiusX="4" RadiusY="4" />
  13. </ControlTemplate>
  14. </Setter.Value>
  15. </Setter>
  16. </Style>
  17. </Setter.Value>
  18. </Setter>
  19. <Setter Property="Background" Value="{DynamicResource RegionBrush}" />
  20. <Setter Property="BorderBrush" Value="{DynamicResource BorderBrush}" />
  21. <Setter Property="BorderThickness" Value="1" />
  22. <Setter Property="HorizontalAlignment" Value="Center" />
  23. <Setter Property="VerticalAlignment" Value="Center" />
  24. <Setter Property="VerticalContentAlignment" Value="Center" />
  25. <Setter Property="Padding" Value="6,0,0,0" />
  26. <Setter Property="Template">
  27. <Setter.Value>
  28. <ControlTemplate TargetType="RadioButton">
  29. <ControlTemplate.Resources>
  30. <Storyboard x:Key="StoryboardCheckedTrue">
  31. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="optionMark">
  32. <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="1" />
  33. </DoubleAnimationUsingKeyFrames>
  34. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="optionMark">
  35. <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="1" />
  36. </DoubleAnimationUsingKeyFrames>
  37. </Storyboard>
  38. <Storyboard x:Key="StoryboardCheckedFalse">
  39. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="optionMark">
  40. <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="0" />
  41. </DoubleAnimationUsingKeyFrames>
  42. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="optionMark">
  43. <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="0" />
  44. </DoubleAnimationUsingKeyFrames>
  45. </Storyboard>
  46. </ControlTemplate.Resources>
  47. <Grid x:Name="templateRoot" Background="Transparent" SnapsToDevicePixels="True">
  48. <Grid.ColumnDefinitions>
  49. <ColumnDefinition Width="Auto" />
  50. <ColumnDefinition />
  51. </Grid.ColumnDefinitions>
  52. <Border Height="16" Width="16" Background="{TemplateBinding Background}" CornerRadius="8" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
  53. <Ellipse x:Name="optionMark" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Fill="White" Width="8" Height="8" RenderTransformOrigin="0.5,0.5">
  54. <Ellipse.RenderTransform>
  55. <TransformGroup>
  56. <ScaleTransform ScaleX="0" ScaleY="0" />
  57. </TransformGroup>
  58. </Ellipse.RenderTransform>
  59. </Ellipse>
  60. </Border>
  61. <Border x:Name="border" Grid.Column="0" Height="16" Width="16" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="8" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
  62. <ContentPresenter x:Name="contentPresenter" Visibility="Collapsed" Grid.Column="1" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
  63. </Grid>
  64. <ControlTemplate.Triggers>
  65. <Trigger Property="HasContent" Value="true">
  66. <Setter Property="Visibility" TargetName="contentPresenter" Value="Visible" />
  67. </Trigger>
  68. <Trigger Property="IsMouseOver" Value="true">
  69. <Setter Property="BorderBrush" Value="{DynamicResource SecondaryBorderBrush}" />
  70. </Trigger>
  71. <MultiTrigger>
  72. <MultiTrigger.Conditions>
  73. <Condition Property="IsChecked" Value="true" />
  74. <Condition Property="IsPressed" Value="true" />
  75. </MultiTrigger.Conditions>
  76. <Setter Property="Opacity" Value=".8" />
  77. </MultiTrigger>
  78. <MultiTrigger>
  79. <MultiTrigger.Conditions>
  80. <Condition Property="IsChecked" Value="false" />
  81. <Condition Property="IsPressed" Value="true" />
  82. </MultiTrigger.Conditions>
  83. <Setter Property="BorderBrush" Value="{DynamicResource PrimaryBrush}" />
  84. </MultiTrigger>
  85. <Trigger Property="IsChecked" Value="true">
  86. <Trigger.EnterActions>
  87. <BeginStoryboard Storyboard="{StaticResource StoryboardCheckedTrue}" />
  88. </Trigger.EnterActions>
  89. <Trigger.ExitActions>
  90. <BeginStoryboard Storyboard="{StaticResource StoryboardCheckedFalse}" />
  91. </Trigger.ExitActions>
  92. <Setter Property="Background" Value="{DynamicResource PrimaryBrush}" />
  93. <Setter Property="BorderBrush" Value="{DynamicResource DarkPrimaryBrush}" />
  94. <Setter TargetName="border" Property="Visibility" Value="Collapsed" />
  95. </Trigger>
  96. <Trigger Property="IsEnabled" Value="False">
  97. <Setter Property="Opacity" Value="0.4" />
  98. </Trigger>
  99. </ControlTemplate.Triggers>
  100. </ControlTemplate>
  101. </Setter.Value>
  102. </Setter>
  103. </Style>
  104. <Style x:Key="RadioButtonSameAsButtonBaseStyle" BasedOn="{StaticResource ButtonBaseBaseStyle}" TargetType="RadioButton">
  105. <Setter Property="hc:BorderElement.CornerRadius" Value="{StaticResource DefaultCornerRadius}" />
  106. <Setter Property="BorderThickness" Value="1" />
  107. <Setter Property="Template">
  108. <Setter.Value>
  109. <ControlTemplate TargetType="RadioButton">
  110. <hc:SimplePanel>
  111. <Border Background="{TemplateBinding Background}" CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}" />
  112. <Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}">
  113. <StackPanel Orientation="Horizontal" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}">
  114. <Path x:Name="PathMain" Width="{TemplateBinding hc:IconElement.Width}" Height="{TemplateBinding hc:IconElement.Height}" Fill="{TemplateBinding Foreground}" SnapsToDevicePixels="True" Stretch="Uniform" Data="{TemplateBinding hc:IconElement.Geometry}" />
  115. <ContentPresenter x:Name="ContentPresenterMain" RecognizesAccessKey="True" VerticalAlignment="Center" Margin="6,0,0,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  116. </StackPanel>
  117. </Border>
  118. <Border Margin="-1" Visibility="Collapsed" CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}" x:Name="BorderChecked" BorderThickness="4" BorderBrush="{DynamicResource DarkMaskBrush}" />
  119. </hc:SimplePanel>
  120. <ControlTemplate.Triggers>
  121. <Trigger Property="IsChecked" Value="true">
  122. <Setter TargetName="BorderChecked" Property="Visibility" Value="Visible" />
  123. </Trigger>
  124. <Trigger Property="Content" Value="{x:Null}">
  125. <Setter Property="Visibility" Value="Collapsed" TargetName="ContentPresenterMain" />
  126. </Trigger>
  127. <Trigger Property="hc:IconElement.Geometry" Value="{x:Null}">
  128. <Setter Property="Visibility" Value="Collapsed" TargetName="PathMain" />
  129. <Setter Property="Margin" Value="0" TargetName="ContentPresenterMain" />
  130. </Trigger>
  131. </ControlTemplate.Triggers>
  132. </ControlTemplate>
  133. </Setter.Value>
  134. </Setter>
  135. <Style.Triggers>
  136. <Trigger Property="IsMouseOver" Value="True">
  137. <Setter Property="Opacity" Value=".9" />
  138. </Trigger>
  139. <Trigger Property="IsPressed" Value="True">
  140. <Setter Property="Opacity" Value=".6" />
  141. </Trigger>
  142. <Trigger Property="IsEnabled" Value="False">
  143. <Setter Property="Opacity" Value="0.4" />
  144. </Trigger>
  145. </Style.Triggers>
  146. </Style>
  147. <Style x:Key="RadioButtonIconBaseStyle" BasedOn="{StaticResource ButtonBaseBaseStyle}" TargetType="RadioButton">
  148. <Setter Property="BorderThickness" Value="1" />
  149. <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisualRadius0}" />
  150. <Setter Property="Foreground" Value="{DynamicResource PrimaryTextBrush}" />
  151. <Setter Property="Background" Value="{DynamicResource RegionBrush}" />
  152. <Setter Property="hc:BorderElement.CornerRadius" Value="0" />
  153. <Setter Property="hc:VisualElement.HighlightBrush" Value="{DynamicResource PrimaryBrush}" />
  154. <Setter Property="Template">
  155. <Setter.Value>
  156. <ControlTemplate TargetType="RadioButton">
  157. <Border CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}">
  158. <Border Name="BorderHighlight" BorderThickness="3,0,0,0" BorderBrush="Transparent">
  159. <StackPanel Orientation="Horizontal" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}">
  160. <Path x:Name="PathMain" Height="{Binding Path=(hc:IconElement.Height),RelativeSource={RelativeSource TemplatedParent}}" Width="{Binding Path=(hc:IconElement.Width),RelativeSource={RelativeSource TemplatedParent}}" Fill="{TemplateBinding Foreground}" SnapsToDevicePixels="True" Stretch="Uniform" Data="{TemplateBinding hc:IconElement.Geometry}" />
  161. <ContentPresenter x:Name="ContentPresenterMain" RecognizesAccessKey="True" VerticalAlignment="Center" Margin="6,0,0,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  162. </StackPanel>
  163. </Border>
  164. </Border>
  165. <ControlTemplate.Triggers>
  166. <Trigger Property="Content" Value="{x:Null}">
  167. <Setter Property="Visibility" Value="Collapsed" TargetName="ContentPresenterMain" />
  168. </Trigger>
  169. <Trigger Property="hc:IconElement.Geometry" Value="{x:Null}">
  170. <Setter Property="Visibility" Value="Collapsed" TargetName="PathMain" />
  171. <Setter Property="Margin" Value="0" TargetName="ContentPresenterMain" />
  172. </Trigger>
  173. <Trigger Property="IsChecked" Value="True">
  174. <Setter Property="BorderBrush" Value="{Binding Path=(hc:VisualElement.HighlightBrush),RelativeSource={RelativeSource TemplatedParent}}" TargetName="BorderHighlight" />
  175. </Trigger>
  176. </ControlTemplate.Triggers>
  177. </ControlTemplate>
  178. </Setter.Value>
  179. </Setter>
  180. <Style.Triggers>
  181. <Trigger Property="IsMouseOver" Value="True">
  182. <Setter Property="Opacity" Value=".9" />
  183. </Trigger>
  184. <Trigger Property="IsPressed" Value="True">
  185. <Setter Property="Opacity" Value=".6" />
  186. </Trigger>
  187. <Trigger Property="IsEnabled" Value="False">
  188. <Setter Property="Opacity" Value="0.4" />
  189. </Trigger>
  190. </Style.Triggers>
  191. </Style>
  192. <Style x:Key="RadioGroupItemBaseStyle" BasedOn="{StaticResource BaseStyle}" TargetType="RadioButton">
  193. <Setter Property="Background" Value="{DynamicResource RegionBrush}" />
  194. <Setter Property="BorderBrush" Value="{DynamicResource BorderBrush}" />
  195. <Setter Property="BorderThickness" Value="1" />
  196. <Setter Property="VerticalAlignment" Value="Center" />
  197. <Setter Property="VerticalContentAlignment" Value="Center" />
  198. <Setter Property="HorizontalContentAlignment" Value="Center" />
  199. <Setter Property="hc:BorderElement.CornerRadius" Value="0" />
  200. <Setter Property="Height" Value="{StaticResource DefaultControlHeight}" />
  201. <Setter Property="Padding" Value="10,0" />
  202. <Setter Property="Margin" Value="-1,0,0,0" />
  203. <Setter Property="hc:IconElement.Width" Value="16" />
  204. <Setter Property="hc:IconElement.Height" Value="16" />
  205. <Setter Property="Template">
  206. <Setter.Value>
  207. <ControlTemplate TargetType="RadioButton">
  208. <Border x:Name="BorderRoot" CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}">
  209. <StackPanel Orientation="Horizontal" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}">
  210. <Path x:Name="PathMain" Height="{Binding Path=(hc:IconElement.Height),RelativeSource={RelativeSource TemplatedParent}}" Width="{Binding Path=(hc:IconElement.Width),RelativeSource={RelativeSource TemplatedParent}}" Fill="{Binding Path=(TextElement.Foreground),ElementName=contentPresenter}" SnapsToDevicePixels="True" Stretch="Uniform" Data="{TemplateBinding hc:IconElement.Geometry}" />
  211. <ContentPresenter x:Name="contentPresenter" RecognizesAccessKey="True" VerticalAlignment="Center" Margin="6,0,0,0" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  212. </StackPanel>
  213. </Border>
  214. <ControlTemplate.Triggers>
  215. <Trigger Property="IsMouseOver" Value="True">
  216. <Setter Property="TextElement.Foreground" Value="{DynamicResource PrimaryBrush}" TargetName="contentPresenter" />
  217. </Trigger>
  218. <Trigger Property="IsChecked" Value="true">
  219. <Setter Property="BorderBrush" Value="{Binding Path=(hc:VisualElement.HighlightBorderBrush),RelativeSource={RelativeSource TemplatedParent}}" TargetName="BorderRoot" />
  220. <Setter Property="Background" Value="{Binding Path=(hc:VisualElement.HighlightBackground),RelativeSource={RelativeSource TemplatedParent}}" TargetName="BorderRoot" />
  221. <Setter Property="TextElement.Foreground" Value="{Binding Path=(hc:VisualElement.HighlightForeground),RelativeSource={RelativeSource TemplatedParent}}" TargetName="contentPresenter" />
  222. </Trigger>
  223. <Trigger Property="Content" Value="{x:Null}">
  224. <Setter Property="Visibility" Value="Collapsed" TargetName="contentPresenter" />
  225. </Trigger>
  226. <Trigger Property="hc:IconElement.Geometry" Value="{x:Null}">
  227. <Setter Property="Visibility" Value="Collapsed" TargetName="PathMain" />
  228. <Setter Property="Margin" Value="0" TargetName="contentPresenter" />
  229. </Trigger>
  230. </ControlTemplate.Triggers>
  231. </ControlTemplate>
  232. </Setter.Value>
  233. </Setter>
  234. <Style.Triggers>
  235. <Trigger Property="IsEnabled" Value="False">
  236. <Setter Property="Opacity" Value="0.4" />
  237. </Trigger>
  238. <Trigger Property="IsChecked" Value="True">
  239. <Setter Property="Panel.ZIndex" Value="{x:Static system:Int32.MaxValue}" />
  240. </Trigger>
  241. <DataTrigger Binding="{Binding Orientation,RelativeSource={RelativeSource AncestorType=hc:ButtonGroup}}" Value="Vertical">
  242. <Setter Property="Margin" Value="0,-1,0,0" />
  243. </DataTrigger>
  244. <Trigger Property="IsMouseOver" Value="True">
  245. <Setter Property="Background" Value="{DynamicResource SecondaryRegionBrush}" />
  246. </Trigger>
  247. <Trigger Property="IsPressed" Value="True">
  248. <Setter Property="Background" Value="{DynamicResource BorderBrush}" />
  249. </Trigger>
  250. </Style.Triggers>
  251. </Style>
  252. </ResourceDictionary>