Skip to content

Commit 418523a

Browse files
Merge pull request #205 from WPFDevelopersOrg/0.0.0.3
Merge from 0.0.0.3 to master
2 parents f23808f + b2d722f commit 418523a

File tree

103 files changed

+4888
-1842
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+4888
-1842
lines changed

src/Package.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
<IncludeSymbols>true</IncludeSymbols>
88
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
99
<Copyright>Copyright © WPFDevelopersOrg 2025</Copyright>
10-
<AssemblyVersion>0.0.0.2</AssemblyVersion>
11-
<FileVersion>0.0.0.2</FileVersion>
12-
<Version>0.0.0.2</Version>
10+
<AssemblyVersion>0.0.0.3</AssemblyVersion>
11+
<FileVersion>0.0.0.3</FileVersion>
12+
<Version>0.0.0.3</Version>
1313
<RepositoryUrl>https://github.com/WPFDevelopersOrg/WPFDevelopers</RepositoryUrl>
1414
<Configurations>Debug;Release;Debug-.NET40;Release-.NET40</Configurations>
1515
</PropertyGroup>

src/WPFDevelopers.Net40/Themes/Generic.xaml

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@
1818
<Setter Property="UseLayoutRounding" Value="True" />
1919
<Setter Property="TextOptions.TextFormattingMode" Value="Ideal" />
2020
<Setter Property="FontFamily" Value="{DynamicResource WD.FontFamily}" />
21-
<Setter Property="shell:WindowChrome.WindowChrome">
22-
<Setter.Value>
23-
<shell:WindowChrome CaptionHeight="{Binding TitleHeight, RelativeSource={RelativeSource AncestorType=wd:Window}}" GlassFrameThickness="0,0,0,.1" />
24-
</Setter.Value>
25-
</Setter>
2621
<Setter Property="Template">
2722
<Setter.Value>
2823
<ControlTemplate TargetType="{x:Type wd:Window}">
@@ -265,13 +260,14 @@
265260
</Button>
266261
</StackPanel>
267262
</Grid>
268-
<ContentPresenter
269-
x:Name="PART_TitleToolBar"
270-
shell:WindowChrome.IsHitTestVisibleInChrome="True"
271-
Content="{Binding TitleBar, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}"
272-
Focusable="False"
273-
Visibility="Collapsed" />
274263
</control:SmallPanel>
264+
<ContentPresenter
265+
x:Name="PART_TitleToolBar"
266+
Height="{TemplateBinding TitleHeight}"
267+
shell:WindowChrome.IsHitTestVisibleInChrome="True"
268+
Content="{Binding TitleBar, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}"
269+
Focusable="False"
270+
Visibility="Collapsed" />
275271
<AdornerDecorator Grid.Row="1" KeyboardNavigation.IsTabStop="False">
276272
<ContentPresenter x:Name="MainContentPresenter" ClipToBounds="True" />
277273
</AdornerDecorator>
@@ -285,7 +281,7 @@
285281
</Grid>
286282
</Border>
287283
<ControlTemplate.Triggers>
288-
<Trigger Property="TitleBarMode" Value="HighTitleBar">
284+
<Trigger Property="TitleBarMode" Value="High">
289285
<Setter TargetName="PART_HighTitleBar" Property="Visibility" Value="Visible" />
290286
<Setter TargetName="PART_Normal" Property="Visibility" Value="Collapsed" />
291287
</Trigger>
@@ -300,8 +296,9 @@
300296
<Setter TargetName="PART_MinAndMax" Property="Visibility" Value="Collapsed" />
301297
<Setter TargetName="PART_TitleBarMinAndMax" Property="Visibility" Value="Collapsed" />
302298
</Trigger>
303-
<Trigger Property="NoChrome" Value="True">
299+
<Trigger Property="TitleBarMode" Value="None">
304300
<Setter TargetName="PART_GridChrome" Property="Visibility" Value="Collapsed" />
301+
<Setter TargetName="PART_Normal" Property="Visibility" Value="Collapsed" />
305302
<Setter TargetName="PART_TitleToolBar" Property="Visibility" Value="Visible" />
306303
</Trigger>
307304
<MultiTrigger>

src/WPFDevelopers.Net40/Themes/Theme.xaml

Lines changed: 806 additions & 506 deletions
Large diffs are not rendered by default.

src/WPFDevelopers.Net40/Window.cs

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,10 @@ public class Window : System.Windows.Window
3232
private Button _titleBarMaximizeButton;
3333
private Button _titleBarRestoreButton;
3434
private IntPtr hWnd;
35+
private WindowChrome _windowChrome;
3536

3637
public static readonly DependencyProperty TitleHeightProperty =
37-
DependencyProperty.Register("TitleHeight", typeof(double), typeof(Window), new PropertyMetadata(50d));
38-
39-
public static readonly DependencyProperty NoChromeProperty =
40-
DependencyProperty.Register("NoChrome", typeof(bool), typeof(Window), new PropertyMetadata(false));
38+
DependencyProperty.Register("TitleHeight", typeof(double), typeof(Window), new PropertyMetadata(50d, OnTitleHeightChanged));
4139

4240
public static readonly DependencyProperty TitleBarProperty =
4341
DependencyProperty.Register("TitleBar", typeof(object), typeof(Window), new PropertyMetadata(null));
@@ -46,7 +44,9 @@ public class Window : System.Windows.Window
4644
DependencyProperty.Register("TitleBackground", typeof(Brush), typeof(Window), new PropertyMetadata(null));
4745

4846
public static readonly DependencyProperty TitleBarModeProperty =
49-
DependencyProperty.Register("TitleBarMode", typeof(TitleBarMode), typeof(Window), new PropertyMetadata(TitleBarMode.Normal));
47+
DependencyProperty.Register("TitleBarMode", typeof(TitleBarMode), typeof(Window), new PropertyMetadata(TitleBarMode.Normal, OnTitleBarModeChanged));
48+
49+
5050

5151
static Window()
5252
{
@@ -63,6 +63,12 @@ public Window()
6363
CanMinimizeWindow));
6464
CommandBindings.Add(new CommandBinding(SystemCommands.RestoreWindowCommand, RestoreWindow,
6565
CanResizeWindow));
66+
_windowChrome = new WindowChrome
67+
{
68+
CaptionHeight = TitleHeight,
69+
GlassFrameThickness = new Thickness(0, 0, 0, 0.1),
70+
};
71+
WindowChrome.SetWindowChrome(this, _windowChrome);
6672
}
6773

6874
private void Resources_ThemeChanged(ThemeType currentTheme)
@@ -86,6 +92,31 @@ public override void OnApplyTemplate()
8692
_highTitleRestoreButton = GetTemplateChild(HighTitleRestoreButton) as Button;
8793
_titleBarMaximizeButton = GetTemplateChild(TitleBarMaximizeButton) as Button;
8894
_titleBarRestoreButton = GetTemplateChild(TitleBarRestoreButton) as Button;
95+
SetTitleHeight();
96+
}
97+
98+
private static void OnTitleBarModeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
99+
{
100+
var ctrl = d as Window;
101+
if (ctrl != null)
102+
ctrl.SetTitleHeight();
103+
}
104+
105+
private static void OnTitleHeightChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
106+
{
107+
var ctrl = d as Window;
108+
if (ctrl != null)
109+
ctrl._windowChrome.CaptionHeight = ctrl.TitleHeight;
110+
}
111+
112+
void SetTitleHeight()
113+
{
114+
if (TitleBarMode == TitleBarMode.Normal)
115+
TitleHeight = SystemParameters2.Current.WindowNonClientFrameThickness.Top;
116+
else if(TitleBarMode == TitleBarMode.High)
117+
TitleHeight = 50d;
118+
else
119+
_windowChrome.CaptionHeight = TitleHeight;
89120
}
90121

91122
private void Icon_MouseDoubleClick(object sender, MouseButtonEventArgs e)
@@ -100,12 +131,6 @@ public double TitleHeight
100131
set => SetValue(TitleHeightProperty, value);
101132
}
102133

103-
public bool NoChrome
104-
{
105-
get => (bool)GetValue(NoChromeProperty);
106-
set => SetValue(NoChromeProperty, value);
107-
}
108-
109134
public object TitleBar
110135
{
111136
get => (object)GetValue(TitleBarProperty);
@@ -129,8 +154,6 @@ protected override void OnSourceInitialized(EventArgs e)
129154
base.OnSourceInitialized(e);
130155
hWnd = new WindowInteropHelper(this).Handle;
131156
HwndSource.FromHwnd(hWnd).AddHook(WindowProc);
132-
if (TitleBarMode == TitleBarMode.Normal)
133-
TitleHeight = SystemParameters2.Current.WindowNonClientFrameThickness.Top;
134157
}
135158

136159
protected override void OnContentRendered(EventArgs e)
@@ -159,12 +182,7 @@ private void CloseWindow(object sender, ExecutedRoutedEventArgs e)
159182

160183
private void MaximizeWindow(object sender, ExecutedRoutedEventArgs e)
161184
{
162-
if (WindowState == WindowState.Normal)
163-
{
164-
WindowStyle = WindowStyle.SingleBorderWindow;
165-
WindowState = WindowState.Maximized;
166-
WindowStyle = WindowStyle.None;
167-
}
185+
SystemCommands.MaximizeWindow(this);
168186
}
169187

170188
private void MinimizeWindow(object sender, ExecutedRoutedEventArgs e)

src/WPFDevelopers.Net45x/Themes/Generic.xaml

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,6 @@
2020
<Setter Property="UseLayoutRounding" Value="True" />
2121
<Setter Property="TextOptions.TextFormattingMode" Value="Ideal" />
2222
<Setter Property="FontFamily" Value="{DynamicResource WD.FontFamily}" />
23-
<Setter Property="WindowChrome.WindowChrome">
24-
<Setter.Value>
25-
<WindowChrome
26-
CaptionHeight="{Binding TitleHeight, RelativeSource={RelativeSource AncestorType=wd:Window}}"
27-
GlassFrameThickness="0,0,0,.1"
28-
UseAeroCaptionButtons="False" />
29-
</Setter.Value>
30-
</Setter>
3123
<Setter Property="Template">
3224
<Setter.Value>
3325
<ControlTemplate TargetType="{x:Type wd:Window}">
@@ -270,13 +262,14 @@
270262
</Button>
271263
</StackPanel>
272264
</Grid>
273-
<ContentPresenter
274-
x:Name="PART_TitleToolBar"
275-
Content="{Binding TitleBar, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}"
276-
Focusable="False"
277-
Visibility="Collapsed"
278-
WindowChrome.IsHitTestVisibleInChrome="True" />
279265
</control:SmallPanel>
266+
<ContentPresenter
267+
x:Name="PART_TitleToolBar"
268+
Height="{TemplateBinding TitleHeight}"
269+
Content="{Binding TitleBar, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}"
270+
Focusable="False"
271+
Visibility="Collapsed"
272+
WindowChrome.IsHitTestVisibleInChrome="True" />
280273
<AdornerDecorator Grid.Row="1" KeyboardNavigation.IsTabStop="False">
281274
<ContentPresenter x:Name="MainContentPresenter" ClipToBounds="True" />
282275
</AdornerDecorator>
@@ -291,7 +284,7 @@
291284
</Grid>
292285
</Border>
293286
<ControlTemplate.Triggers>
294-
<Trigger Property="TitleBarMode" Value="HighTitleBar">
287+
<Trigger Property="TitleBarMode" Value="High">
295288
<Setter TargetName="PART_HighTitleBar" Property="Visibility" Value="Visible" />
296289
<Setter TargetName="PART_Normal" Property="Visibility" Value="Collapsed" />
297290
</Trigger>
@@ -308,8 +301,9 @@
308301
<Setter TargetName="PART_MinAndMax" Property="Visibility" Value="Collapsed" />
309302
<Setter TargetName="PART_TitleBarMinAndMax" Property="Visibility" Value="Collapsed" />
310303
</Trigger>
311-
<Trigger Property="NoChrome" Value="True">
304+
<Trigger Property="TitleBarMode" Value="None">
312305
<Setter TargetName="PART_GridChrome" Property="Visibility" Value="Collapsed" />
306+
<Setter TargetName="PART_Normal" Property="Visibility" Value="Collapsed" />
313307
<Setter TargetName="PART_TitleToolBar" Property="Visibility" Value="Visible" />
314308
</Trigger>
315309
<MultiTrigger>

src/WPFDevelopers.Net45x/Window.cs

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using WPFDevelopers.Controls;
1010
using WPFDevelopers.Core.Helpers;
1111
using WPFDevelopers.Helpers;
12-
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
1312

1413
namespace WPFDevelopers.Net45x
1514
{
@@ -32,12 +31,10 @@ public class Window : System.Windows.Window
3231
private Button _titleBarMaximizeButton;
3332
private Button _titleBarRestoreButton;
3433
private IntPtr hWnd;
34+
private System.Windows.Shell.WindowChrome _windowChrome;
3535

3636
public static readonly DependencyProperty TitleHeightProperty =
37-
DependencyProperty.Register("TitleHeight", typeof(double), typeof(Window), new PropertyMetadata(50d));
38-
39-
public static readonly DependencyProperty NoChromeProperty =
40-
DependencyProperty.Register("NoChrome", typeof(bool), typeof(Window), new PropertyMetadata(false));
37+
DependencyProperty.Register("TitleHeight", typeof(double), typeof(Window), new PropertyMetadata(50d, OnTitleHeightChanged));
4138

4239
public static readonly DependencyProperty TitleBarProperty =
4340
DependencyProperty.Register("TitleBar", typeof(object), typeof(Window), new PropertyMetadata(null));
@@ -46,7 +43,7 @@ public class Window : System.Windows.Window
4643
DependencyProperty.Register("TitleBackground", typeof(Brush), typeof(Window), new PropertyMetadata(null));
4744

4845
public static readonly DependencyProperty TitleBarModeProperty =
49-
DependencyProperty.Register("TitleBarMode", typeof(TitleBarMode), typeof(Window), new PropertyMetadata(TitleBarMode.Normal));
46+
DependencyProperty.Register("TitleBarMode", typeof(TitleBarMode), typeof(Window), new PropertyMetadata(TitleBarMode.Normal, OnTitleBarModeChanged));
5047

5148
static Window()
5249
{
@@ -64,6 +61,13 @@ public Window()
6461
CanMinimizeWindow));
6562
CommandBindings.Add(new CommandBinding(SystemCommands.RestoreWindowCommand, RestoreWindow,
6663
CanResizeWindow));
64+
_windowChrome = new System.Windows.Shell.WindowChrome
65+
{
66+
CaptionHeight = TitleHeight,
67+
GlassFrameThickness = new Thickness(0, 0, 0, 0.1),
68+
UseAeroCaptionButtons = false
69+
};
70+
System.Windows.Shell.WindowChrome.SetWindowChrome(this, _windowChrome);
6771
}
6872

6973
private void Resources_ThemeChanged(ThemeType currentTheme)
@@ -87,8 +91,29 @@ public override void OnApplyTemplate()
8791
_highTitleRestoreButton = GetTemplateChild(HighTitleRestoreButton) as Button;
8892
_titleBarMaximizeButton = GetTemplateChild(TitleBarMaximizeButton) as Button;
8993
_titleBarRestoreButton = GetTemplateChild(TitleBarRestoreButton) as Button;
94+
SetTitleHeight();
95+
}
96+
private static void OnTitleBarModeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
97+
{
98+
var ctrl = d as Window;
99+
if (ctrl != null)
100+
ctrl.SetTitleHeight();
101+
}
102+
private static void OnTitleHeightChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
103+
{
104+
var ctrl = d as Window;
105+
if (ctrl != null)
106+
ctrl._windowChrome.CaptionHeight = ctrl.TitleHeight;
107+
}
108+
void SetTitleHeight()
109+
{
110+
if (TitleBarMode == TitleBarMode.Normal)
111+
TitleHeight = SystemParameters.WindowNonClientFrameThickness.Top + SystemParameters.WindowResizeBorderThickness.Top;
112+
else if (TitleBarMode == TitleBarMode.High)
113+
TitleHeight = 50d;
114+
else
115+
_windowChrome.CaptionHeight = TitleHeight;
90116
}
91-
92117
private void Icon_MouseDoubleClick(object sender, MouseButtonEventArgs e)
93118
{
94119
if (e.ChangedButton == MouseButton.Left)
@@ -101,12 +126,6 @@ public double TitleHeight
101126
set => SetValue(TitleHeightProperty, value);
102127
}
103128

104-
public bool NoChrome
105-
{
106-
get => (bool)GetValue(NoChromeProperty);
107-
set => SetValue(NoChromeProperty, value);
108-
}
109-
110129
public object TitleBar
111130
{
112131
get => (object)GetValue(TitleBarProperty);
@@ -137,8 +156,6 @@ protected override void OnSourceInitialized(EventArgs e)
137156
base.OnSourceInitialized(e);
138157
hWnd = new WindowInteropHelper(this).Handle;
139158
HwndSource.FromHwnd(hWnd).AddHook(WindowProc);
140-
if (TitleBarMode == TitleBarMode.Normal)
141-
TitleHeight = SystemParameters.WindowNonClientFrameThickness.Top + SystemParameters.WindowResizeBorderThickness.Top;
142159
}
143160

144161
protected override void OnContentRendered(EventArgs e)
@@ -167,12 +184,7 @@ private void CloseWindow(object sender, ExecutedRoutedEventArgs e)
167184

168185
private void MaximizeWindow(object sender, ExecutedRoutedEventArgs e)
169186
{
170-
if (WindowState == WindowState.Normal)
171-
{
172-
WindowStyle = WindowStyle.SingleBorderWindow;
173-
WindowState = WindowState.Maximized;
174-
WindowStyle = WindowStyle.None;
175-
}
187+
SystemCommands.MaximizeWindow(this);
176188
}
177189

178190
private void MinimizeWindow(object sender, ExecutedRoutedEventArgs e)
@@ -224,7 +236,7 @@ private IntPtr WindowProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, re
224236
var contentPresenter = button.Template.FindName("PART_ContentPresenter", button) as ContentPresenter;
225237
if (contentPresenter != null)
226238
{
227-
var rect = new Rect(button.PointToScreen(new Point()),new Size(button.ActualWidth * dpiX, button.ActualHeight * dpiX));
239+
var rect = new Rect(button.PointToScreen(new Point()), new Size(button.ActualWidth * dpiX, button.ActualHeight * dpiX));
228240
if (rect.Contains(new Point(x, y)))
229241
{
230242
handled = true;

src/WPFDevelopers.Samples.Shared/App.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
<ResourceDictionary Source="pack://application:,,,/WPFDevelopers.Samples;component/Controls/Loadings/StreamerLoading.xaml" />
3939
<ResourceDictionary Source="pack://application:,,,/WPFDevelopers.Samples;component/Controls/Theme/Theme.xaml" />
4040
<ResourceDictionary Source="pack://application:,,,/WPFDevelopers.Samples;component/Controls/BubblleControl/BubblleControl.xaml" />
41+
<ResourceDictionary Source="pack://application:,,,/WPFDevelopers.Samples;component/Controls/MultiSelectionSearchComboBox/MultiSelectSearchComboBox.xaml" />
4142
</ResourceDictionary.MergedDictionaries>
4243
<Style TargetType="avalonedit:TextEditor">
4344
<Setter Property="Foreground" Value="{DynamicResource WD.PrimaryTextBrush}" />

src/WPFDevelopers.Shared/Controls/MultiSelectionSearchComboBox/MultiSelectListBox.cs renamed to src/WPFDevelopers.Samples.Shared/Controls/MultiSelectionSearchComboBox/MultiSelectListBox.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
using System.Windows;
22
using System.Windows.Controls;
3+
using WPFDevelopers.Controls;
34

4-
namespace WPFDevelopers.Controls
5+
namespace WPFDevelopers.Samples.Controls
56
{
67
public class MultiSelectListBox : ListBox
78
{

src/WPFDevelopers.Shared/Controls/MultiSelectionSearchComboBox/MultiSelectSearchComboBox.cs renamed to src/WPFDevelopers.Samples.Shared/Controls/MultiSelectionSearchComboBox/MultiSelectSearchComboBox.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,13 @@
1111
using System.Windows.Interop;
1212
using WPFDevelopers.Helpers;
1313

14-
namespace WPFDevelopers.Controls
14+
namespace WPFDevelopers.Samples.Controls
1515
{
1616
[TemplatePart(Name = "PART_TextBox", Type = typeof(TextBox))]
1717
[TemplatePart(Name = "PART_Popup", Type = typeof(Popup))]
1818
[TemplatePart(Name = "PART_Selector", Type = typeof(ListBox))]
1919
[TemplatePart(Name = "PART_SelectAll", Type = typeof(CheckBox))]
2020
[TemplatePart(Name = "PART_SearchSelector", Type = typeof(ListBox))]
21-
[Obsolete("MultiSelectionSearchComboBox is Obsolete,Use MultiSelectComboBox")]
2221
public class MultiSelectionSearchComboBox : Control
2322
{
2423
private const string TextBoxTemplateName = "PART_TextBox";

0 commit comments

Comments
 (0)