Skip to content

Commit e91e35d

Browse files
committed
Fix HandyControl bugs
1 parent f0aeb0d commit e91e35d

File tree

3 files changed

+492
-0
lines changed

3 files changed

+492
-0
lines changed

IPConfig/App.xaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
<ResourceDictionary.MergedDictionaries>
77
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml" />
88
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml" />
9+
10+
<ResourceDictionary Source="/Themes/FixHandyControlTextBoxPlusTemplate.xaml" />
11+
<ResourceDictionary Source="/Themes/FixHandyControlSearchBarPlusTemplate.xaml" />
12+
913
<ResourceDictionary Source="/Themes/MyResources.xaml" />
1014
<ResourceDictionary Source="/Themes/MyLightTheme.xaml" />
1115
<ResourceDictionary Source="/Themes/MyStyles.xaml" />
Lines changed: 269 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,269 @@
1+
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
3+
xmlns:hc="https://handyorg.github.io/handycontrol">
4+
5+
<!-- Fix Version="3.4.0" -->
6+
7+
<ControlTemplate x:Key="SearchBarPlusTopTemplate"
8+
TargetType="hc:SearchBar">
9+
<Grid>
10+
<Grid.RowDefinitions>
11+
<RowDefinition Height="Auto" />
12+
<RowDefinition Height="{Binding Path=(hc:InfoElement.ContentHeight), RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource Double2GridLengthConverter}}"
13+
MinHeight="{Binding Path=(hc:InfoElement.MinContentHeight), RelativeSource={RelativeSource TemplatedParent}}" />
14+
</Grid.RowDefinitions>
15+
<DockPanel Margin="{TemplateBinding Padding}"
16+
HorizontalAlignment="{Binding Path=(hc:TitleElement.HorizontalAlignment), RelativeSource={RelativeSource TemplatedParent}}"
17+
LastChildFill="True"
18+
Visibility="{Binding Path=(hc:InfoElement.Title), RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource String2VisibilityConverter}}">
19+
<ContentPresenter Margin="4,0,0,0"
20+
Content="{Binding Path=(hc:InfoElement.Symbol), RelativeSource={RelativeSource TemplatedParent}}"
21+
DockPanel.Dock="Right"
22+
TextElement.Foreground="{DynamicResource DangerBrush}"
23+
Visibility="{Binding Path=(hc:InfoElement.Necessary), RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource Boolean2VisibilityConverter}}" />
24+
<TextBlock hc:TextBlockAttach.AutoTooltip="True"
25+
Text="{Binding Path=(hc:InfoElement.Title), RelativeSource={RelativeSource TemplatedParent}}"
26+
TextTrimming="CharacterEllipsis"
27+
TextWrapping="NoWrap" />
28+
</DockPanel>
29+
<Border x:Name="border"
30+
Grid.Row="1"
31+
Background="{TemplateBinding Background}"
32+
BorderBrush="{TemplateBinding BorderBrush}"
33+
BorderThickness="{TemplateBinding BorderThickness}"
34+
CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius), RelativeSource={RelativeSource TemplatedParent}}" />
35+
<Grid x:Name="root"
36+
Grid.Row="1"
37+
SnapsToDevicePixels="true">
38+
<Grid.ColumnDefinitions>
39+
<ColumnDefinition />
40+
<ColumnDefinition Width="Auto" />
41+
</Grid.ColumnDefinitions>
42+
<Border Margin="4,0,-4,0"
43+
Padding="8,0,0,0"
44+
HorizontalAlignment="Right"
45+
VerticalAlignment="Stretch"
46+
Panel.ZIndex="99"
47+
Background="{TemplateBinding Background}"
48+
BorderBrush="{x:Null}"
49+
BorderThickness="{TemplateBinding BorderThickness,
50+
Converter={StaticResource ThicknessSplitConverter},
51+
ConverterParameter='0,1,0,1'}"
52+
CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius), RelativeSource={RelativeSource TemplatedParent}}"
53+
Visibility="{Binding ElementName=ButtonClear, Path=Visibility}">
54+
<Button Name="ButtonClear"
55+
Width="Auto"
56+
Height="Auto"
57+
Padding="0"
58+
HorizontalAlignment="Center"
59+
VerticalAlignment="Center"
60+
HorizontalContentAlignment="Center"
61+
hc:BorderElement.CornerRadius="4"
62+
hc:IconElement.Geometry="{StaticResource DeleteFillCircleGeometry}"
63+
hc:IconElement.Width="14"
64+
Background="{TemplateBinding Background}"
65+
Command="{x:Static hc:ControlCommands.Clear}"
66+
Foreground="{Binding BorderBrush, ElementName=border}"
67+
Style="{StaticResource ButtonIcon}"
68+
Visibility="Collapsed" />
69+
</Border>
70+
<TextBlock Grid.Row="0"
71+
Grid.Column="0"
72+
Margin="{TemplateBinding Padding}"
73+
HorizontalAlignment="Stretch"
74+
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
75+
Style="{StaticResource TextBlockDefaultThiLight}"
76+
Text="{Binding Path=(hc:InfoElement.Placeholder), RelativeSource={RelativeSource TemplatedParent}}"
77+
Visibility="{TemplateBinding Text,
78+
Converter={StaticResource String2VisibilityReConverter}}" />
79+
<ScrollViewer x:Name="PART_ContentHost"
80+
Grid.Row="0"
81+
Grid.Column="0"
82+
Margin="-2,0"
83+
Padding="{TemplateBinding Padding}"
84+
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
85+
Focusable="false"
86+
HorizontalScrollBarVisibility="Hidden"
87+
VerticalScrollBarVisibility="Hidden" />
88+
<Button Grid.Row="0"
89+
Grid.Column="1"
90+
Width="Auto"
91+
Height="Auto"
92+
Margin="{TemplateBinding BorderThickness,
93+
Converter={StaticResource ThicknessSplitConverter},
94+
ConverterParameter='0,1,1,1'}"
95+
Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource ThicknessSplitConverter}, ConverterParameter='1,0,1,0'}"
96+
HorizontalAlignment="Stretch"
97+
VerticalAlignment="Stretch"
98+
HorizontalContentAlignment="Left"
99+
hc:IconElement.Geometry="{StaticResource SearchGeometry}"
100+
hc:IconElement.Width="14"
101+
BorderBrush="{x:Null}"
102+
BorderThickness="0"
103+
Command="{x:Static hc:ControlCommands.Search}"
104+
Focusable="False"
105+
Foreground="{TemplateBinding BorderBrush}"
106+
Style="{StaticResource ButtonIcon}" />
107+
</Grid>
108+
</Grid>
109+
<ControlTemplate.Triggers>
110+
<Trigger Property="IsEnabled" Value="false">
111+
<Setter TargetName="border" Property="Opacity" Value="0.4" />
112+
<Setter TargetName="root" Property="Opacity" Value="0.4" />
113+
</Trigger>
114+
<Trigger SourceName="root" Property="IsMouseOver" Value="true">
115+
<Setter Property="BorderBrush" Value="{DynamicResource SecondaryBorderBrush}" />
116+
</Trigger>
117+
<MultiTrigger>
118+
<MultiTrigger.Conditions>
119+
<Condition SourceName="root" Property="IsMouseOver" Value="true" />
120+
<Condition Property="hc:InfoElement.ShowClearButton" Value="True" />
121+
</MultiTrigger.Conditions>
122+
<Setter TargetName="ButtonClear" Property="Visibility" Value="Visible" />
123+
</MultiTrigger>
124+
<Trigger Property="IsFocused" Value="true">
125+
<Setter Property="BorderBrush" Value="{DynamicResource PrimaryBrush}" />
126+
</Trigger>
127+
</ControlTemplate.Triggers>
128+
</ControlTemplate>
129+
130+
<ControlTemplate x:Key="SearchBarPlusLeftTemplate"
131+
TargetType="hc:SearchBar">
132+
<Grid Height="{Binding Path=(hc:InfoElement.ContentHeight), RelativeSource={RelativeSource TemplatedParent}}"
133+
MinHeight="{Binding Path=(hc:InfoElement.MinContentHeight), RelativeSource={RelativeSource TemplatedParent}}">
134+
<Grid.ColumnDefinitions>
135+
<ColumnDefinition Width="{Binding Path=(hc:InfoElement.TitleWidth), RelativeSource={RelativeSource TemplatedParent}}" />
136+
<ColumnDefinition />
137+
</Grid.ColumnDefinitions>
138+
<DockPanel Margin="{Binding Path=(hc:TitleElement.MarginOnTheLeft), RelativeSource={RelativeSource TemplatedParent}}"
139+
HorizontalAlignment="{Binding Path=(hc:TitleElement.HorizontalAlignment), RelativeSource={RelativeSource TemplatedParent}}"
140+
VerticalAlignment="{Binding Path=(hc:TitleElement.VerticalAlignment), RelativeSource={RelativeSource TemplatedParent}}"
141+
LastChildFill="True"
142+
Visibility="{Binding Path=(hc:InfoElement.Title), RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource String2VisibilityConverter}}">
143+
<ContentPresenter Margin="4,0,0,0"
144+
Content="{Binding Path=(hc:InfoElement.Symbol), RelativeSource={RelativeSource TemplatedParent}}"
145+
DockPanel.Dock="Right"
146+
TextElement.Foreground="{DynamicResource DangerBrush}"
147+
Visibility="{Binding Path=(hc:InfoElement.Necessary), RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource Boolean2VisibilityConverter}}" />
148+
<TextBlock hc:TextBlockAttach.AutoTooltip="True"
149+
Text="{Binding Path=(hc:InfoElement.Title), RelativeSource={RelativeSource TemplatedParent}}"
150+
TextTrimming="CharacterEllipsis"
151+
TextWrapping="NoWrap" />
152+
</DockPanel>
153+
<Border x:Name="border"
154+
Grid.Column="1"
155+
Background="{TemplateBinding Background}"
156+
BorderBrush="{TemplateBinding BorderBrush}"
157+
BorderThickness="{TemplateBinding BorderThickness}"
158+
CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius), RelativeSource={RelativeSource TemplatedParent}}" />
159+
<Grid x:Name="root"
160+
Grid.Column="1"
161+
SnapsToDevicePixels="true">
162+
<Grid.ColumnDefinitions>
163+
<ColumnDefinition />
164+
<ColumnDefinition Width="Auto" />
165+
</Grid.ColumnDefinitions>
166+
<Border Margin="4,0,-4,0"
167+
Padding="8,0,0,0"
168+
HorizontalAlignment="Right"
169+
VerticalAlignment="Stretch"
170+
Panel.ZIndex="99"
171+
Background="{TemplateBinding Background}"
172+
BorderBrush="{x:Null}"
173+
BorderThickness="{TemplateBinding BorderThickness,
174+
Converter={StaticResource ThicknessSplitConverter},
175+
ConverterParameter='0,1,0,1'}"
176+
CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius), RelativeSource={RelativeSource TemplatedParent}}"
177+
Visibility="{Binding ElementName=ButtonClear, Path=Visibility}">
178+
<Button Name="ButtonClear"
179+
Width="Auto"
180+
Height="Auto"
181+
Padding="0"
182+
HorizontalAlignment="Center"
183+
VerticalAlignment="Center"
184+
HorizontalContentAlignment="Center"
185+
hc:BorderElement.CornerRadius="4"
186+
hc:IconElement.Geometry="{StaticResource DeleteFillCircleGeometry}"
187+
hc:IconElement.Width="14"
188+
Background="{TemplateBinding Background}"
189+
Command="{x:Static hc:ControlCommands.Clear}"
190+
Foreground="{Binding BorderBrush, ElementName=border}"
191+
Style="{StaticResource ButtonIcon}"
192+
Visibility="Collapsed" />
193+
</Border>
194+
<TextBlock Grid.Row="0"
195+
Grid.Column="0"
196+
Margin="{TemplateBinding Padding}"
197+
HorizontalAlignment="Stretch"
198+
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
199+
Style="{StaticResource TextBlockDefaultThiLight}"
200+
Text="{Binding Path=(hc:InfoElement.Placeholder), RelativeSource={RelativeSource TemplatedParent}}"
201+
Visibility="{TemplateBinding Text,
202+
Converter={StaticResource String2VisibilityReConverter}}" />
203+
<ScrollViewer x:Name="PART_ContentHost"
204+
Grid.Row="0"
205+
Grid.Column="0"
206+
Margin="-2,0"
207+
Padding="{TemplateBinding Padding}"
208+
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
209+
Focusable="false"
210+
HorizontalScrollBarVisibility="Hidden"
211+
VerticalScrollBarVisibility="Hidden" />
212+
<Button Grid.Row="0"
213+
Grid.Column="1"
214+
Width="Auto"
215+
Height="Auto"
216+
Margin="{TemplateBinding BorderThickness,
217+
Converter={StaticResource ThicknessSplitConverter},
218+
ConverterParameter='0,1,1,1'}"
219+
Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource ThicknessSplitConverter}, ConverterParameter='1,0,1,0'}"
220+
HorizontalAlignment="Stretch"
221+
VerticalAlignment="Stretch"
222+
HorizontalContentAlignment="Left"
223+
hc:IconElement.Geometry="{StaticResource SearchGeometry}"
224+
hc:IconElement.Width="14"
225+
BorderBrush="{x:Null}"
226+
BorderThickness="0"
227+
Command="{x:Static hc:ControlCommands.Search}"
228+
Focusable="False"
229+
Foreground="{TemplateBinding BorderBrush}"
230+
Style="{StaticResource ButtonIcon}" />
231+
</Grid>
232+
</Grid>
233+
<ControlTemplate.Triggers>
234+
<Trigger Property="IsEnabled" Value="false">
235+
<Setter TargetName="border" Property="Opacity" Value="0.4" />
236+
<Setter TargetName="root" Property="Opacity" Value="0.4" />
237+
</Trigger>
238+
<Trigger SourceName="root" Property="IsMouseOver" Value="true">
239+
<Setter Property="BorderBrush" Value="{DynamicResource SecondaryBorderBrush}" />
240+
</Trigger>
241+
<MultiTrigger>
242+
<MultiTrigger.Conditions>
243+
<Condition SourceName="root" Property="IsMouseOver" Value="true" />
244+
<Condition Property="hc:InfoElement.ShowClearButton" Value="True" />
245+
</MultiTrigger.Conditions>
246+
<Setter TargetName="ButtonClear" Property="Visibility" Value="Visible" />
247+
</MultiTrigger>
248+
<Trigger Property="IsFocused" Value="true">
249+
<Setter Property="BorderBrush" Value="{DynamicResource PrimaryBrush}" />
250+
</Trigger>
251+
</ControlTemplate.Triggers>
252+
</ControlTemplate>
253+
254+
<Style x:Key="SearchBarPlusBaseStyle"
255+
BasedOn="{StaticResource SearchBarExtendBaseStyle}"
256+
TargetType="hc:SearchBar">
257+
<Setter Property="Template" Value="{StaticResource SearchBarPlusTopTemplate}" />
258+
<Style.Triggers>
259+
<Trigger Property="hc:InfoElement.TitlePlacement" Value="Left">
260+
<Setter Property="Template" Value="{StaticResource SearchBarPlusLeftTemplate}" />
261+
<Setter Property="Width" Value="Auto" />
262+
</Trigger>
263+
</Style.Triggers>
264+
</Style>
265+
266+
<Style x:Key="SearchBarPlus"
267+
BasedOn="{StaticResource SearchBarPlusBaseStyle}"
268+
TargetType="hc:SearchBar" />
269+
</ResourceDictionary>

0 commit comments

Comments
 (0)