标签:
How create WPF CheckBox style and customize it. The CheckBox style is inspired by Android design.
CheckBox design:
Grid with relative size of columns and rows makes possible change CheckBox size using Height and Width . Or you can use Viewbox.
Design of CheckBox style:
CheckBox states:
a) checked, disable
b) checked
c) indeterminate, disable
d) indeterminate
e) unchecked
f) pressed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
< Style x:Key = "CheckBoxStyle" TargetType = "{x:Type CheckBox}" > < Setter Property = "SnapsToDevicePixels" Value = "true" /> < Setter Property = "OverridesDefaultStyle" Value = "true" /> < Setter Property = "Height" Value = "30" /> < Setter Property = "FocusVisualStyle" Value = "{DynamicResource MyFocusVisualStyte}" /> < Setter Property = "Template" > < Setter.Value > < ControlTemplate TargetType = "{x:Type CheckBox}" > < BulletDecorator > < BulletDecorator.Bullet > < Grid Height = "{TemplateBinding Height}" Width = "{Binding RelativeSource={RelativeSource Self}, Path=Height, UpdateSourceTrigger=PropertyChanged}" MinHeight = "30" MinWidth = "30" ShowGridLines = "False" > < Grid.ColumnDefinitions > < ColumnDefinition Width = "4*" /> < ColumnDefinition Width = "1*" /> < ColumnDefinition Width = "1*" /> < ColumnDefinition Width = "4*" /> < ColumnDefinition Width = "1*" /> < ColumnDefinition Width = "1*" /> < ColumnDefinition Width = "2*" /> < ColumnDefinition Width = "2*" /> </ Grid.ColumnDefinitions > < Grid.RowDefinitions > < RowDefinition Height = "3*" /> < RowDefinition Height = "1*" /> < RowDefinition Height = "1*" /> < RowDefinition Height = "1*" /> < RowDefinition Height = "4*" /> < RowDefinition Height = "1*" /> < RowDefinition Height = "1*" /> < RowDefinition Height = "4*" /> </ Grid.RowDefinitions > < Border Name = "MainBorder" Grid.ColumnSpan = "9" Grid.RowSpan = "9" CornerRadius = "4" BorderThickness = "1" Background = "Transparent" /> < Border Name = "InnerBorder" Grid.Column = "1" Grid.ColumnSpan = "5" Grid.Row = "2" Grid.RowSpan = "5" BorderThickness = "1" BorderBrush = "#808080" /> < Path Name = "InnerPath" Grid.Column = "1" Grid.ColumnSpan = "5" Grid.Row = "2" Grid.RowSpan = "5" Data = "M31,5 L19.5,5 19.5,19.5 34.5,19.5 34.5,11.75" Stretch = "Fill" Stroke = "#808080" /> < Path Name = "CheckMark" Grid.Column = "2" Grid.ColumnSpan = "5" Grid.Row = "1" Grid.RowSpan = "5" Opacity = "0" Data = "M9.07743946676476E-09,4.31805768640244L4.68740335877841,8.86361158398516C4.68740335877841,8.86361158398516,16.3281249985376,-2.42451336648723,16.3281249985376,-2.42451336648723L14.0622100581796,-4.77304938341948 4.68740335877846,4.31805791992662 2.22656251699567,1.93164208562579z" Fill = "#3babe3" Stretch = "Fill" Stroke = "#3babe3" /> < Path Name = "InderminateMark" Grid.Column = "3" Grid.Row = "4" Data = "M0,4 L1,5 5,1 4,0" Opacity = "0" Stretch = "Fill" StrokeThickness = "0" Fill = "#808080" /> </ Grid > </ BulletDecorator.Bullet > < VisualStateManager.VisualStateGroups > < VisualStateGroup x:Name = "CheckStates" > < VisualState x:Name = "Checked" > < Storyboard > < DoubleAnimation Storyboard.TargetProperty = "Opacity" Storyboard.TargetName = "CheckMark" Duration = "0:0:0.2" To = "1" /> </ Storyboard > </ VisualState > < VisualState x:Name = "Unchecked" > < Storyboard > < DoubleAnimation Storyboard.TargetProperty = "Opacity" Storyboard.TargetName = "CheckMark" Duration = "0:0:0.2" To = "0" /> </ Storyboard > </ VisualState > < VisualState x:Name = "Indeterminate" > < Storyboard > < DoubleAnimation Storyboard.TargetProperty = "Opacity" Storyboard.TargetName = "InderminateMark" Duration = "0:0:0.2" To = "1" /> </ Storyboard > </ VisualState > </ VisualStateGroup > </ VisualStateManager.VisualStateGroups > < ContentPresenter Margin = "4,0,4,0" VerticalAlignment = "Center" HorizontalAlignment = "Left" RecognizesAccessKey = "True" /> </ BulletDecorator > < ControlTemplate.Triggers > < Trigger Property = "IsChecked" Value = "True" > < Setter TargetName = "InnerBorder" Property = "Visibility" Value = "Collapsed" /> </ Trigger > < Trigger Property = "IsPressed" Value = "True" > < Setter TargetName = "MainBorder" Property = "Background" Value = "#81d2eb" /> </ Trigger > < Trigger Property = "IsEnabled" Value = "False" > < Setter TargetName = "CheckMark" Property = "Fill" Value = "#cccccc" /> < Setter TargetName = "CheckMark" Property = "Stroke" Value = "#cccccc" /> < Setter TargetName = "InnerPath" Property = "Stroke" Value = "#cccccc" /> < Setter TargetName = "InderminateMark" Property = "Fill" Value = "#cccccc" /> < Setter TargetName = "InnerBorder" Property = "BorderBrush" Value = "#cccccc" /> </ Trigger > </ ControlTemplate.Triggers > </ ControlTemplate > </ Setter.Value > </ Setter > </ Style > |
1
2
3
4
5
6
7
8
9
10
|
< Style x:Key = "MyFocusVisualStyte" > < Setter Property = "Control.Template" > < Setter.Value > < ControlTemplate > < Rectangle x:Name = "FocusStyle" StrokeDashArray = "4 4" RadiusX = "5" RadiusY = "5" Fill = "Transparent" Stroke = "#81d2eb" StrokeThickness = "1" /> </ ControlTemplate > </ Setter.Value > </ Setter > </ Style > |
标签:
原文地址:http://www.cnblogs.com/aquarius20th/p/4877012.html