Skip to content

Commit 01572d4

Browse files
authored
Allowing the DrawerHost to be in either standard or modal (#2232)
This is to match specification https://material.io/components/navigation-drawer
1 parent 2d104df commit 01572d4

File tree

4 files changed

+202
-99
lines changed

4 files changed

+202
-99
lines changed

MainDemo.Wpf/Drawers.xaml

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,33 @@
1818
<TextBlock
1919
VerticalAlignment="Center"
2020
Text="Black Overlay Background"/>
21-
21+
2222
<ToggleButton
2323
Margin="8 0 16 0"
2424
x:Name="BackgroundToggle" />
2525

2626
<TextBlock
2727
VerticalAlignment="Center"
2828
Text="Primary Overlay Background"/>
29+
30+
<TextBlock Text="Open Mode" Margin="30,0,16,0" VerticalAlignment="Center"/>
31+
<ComboBox SelectedValue="{Binding OpenMode, ElementName=DrawerHost}"
32+
SelectedValuePath="Content">
33+
<ComboBoxItem Content="{x:Static materialDesign:DrawerHostOpenMode.Model}" />
34+
<ComboBoxItem Content="{x:Static materialDesign:DrawerHostOpenMode.Standard}" />
35+
</ComboBox>
2936
</StackPanel>
3037

3138
<smtx:XamlDisplay
3239
UniqueKey="drawers_1"
3340
MaxHeight="{x:Static system:Double.MaxValue}"
3441
Margin="5">
3542
<materialDesign:DrawerHost
36-
Margin="32"
43+
x:Name="DrawerHost"
44+
Margin="32"
3745
HorizontalAlignment="Center"
3846
VerticalAlignment="Center"
39-
BorderThickness="2"
47+
BorderThickness="2"
4048
BorderBrush="{DynamicResource MaterialDesignDivider}">
4149

4250
<materialDesign:DrawerHost.Style>
@@ -48,14 +56,14 @@
4856
</Style.Triggers>
4957
</Style>
5058
</materialDesign:DrawerHost.Style>
51-
59+
5260
<materialDesign:DrawerHost.LeftDrawerContent>
5361
<StackPanel Margin="16">
5462
<TextBlock
5563
Margin="4"
5664
HorizontalAlignment="Center"
5765
Text="LEFT FIELD"/>
58-
66+
5967
<Button
6068
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
6169
CommandParameter="{x:Static Dock.Left}"
@@ -72,7 +80,7 @@
7280
Content="CLOSE ALL"/>
7381
</StackPanel>
7482
</materialDesign:DrawerHost.LeftDrawerContent>
75-
83+
7684
<materialDesign:DrawerHost.TopDrawerContent>
7785
<StackPanel
7886
Margin="16"
@@ -99,22 +107,22 @@
99107
Content="CLOSE THIS"/>
100108
</StackPanel>
101109
</materialDesign:DrawerHost.TopDrawerContent>
102-
110+
103111
<materialDesign:DrawerHost.RightDrawerContent>
104112
<StackPanel Margin="16">
105113
<TextBlock
106114
Margin="4"
107115
HorizontalAlignment="Center"
108116
Text="THE RIGHT STUFF"/>
109-
117+
110118
<Button
111119
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
112120
CommandParameter="{x:Static Dock.Right}"
113121
Margin="4"
114122
HorizontalAlignment="Center"
115123
Style="{DynamicResource MaterialDesignFlatButton}"
116124
Content="CLOSE THIS"/>
117-
125+
118126
<Button
119127
Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
120128
Margin="4"
@@ -123,7 +131,7 @@
123131
Content="CLOSE ALL"/>
124132
</StackPanel>
125133
</materialDesign:DrawerHost.RightDrawerContent>
126-
134+
127135
<materialDesign:DrawerHost.BottomDrawerContent>
128136
<StackPanel
129137
Margin="16"
@@ -150,7 +158,7 @@
150158
Content="CLOSE THIS"/>
151159
</StackPanel>
152160
</materialDesign:DrawerHost.BottomDrawerContent>
153-
161+
154162
<Grid
155163
MinWidth="480"
156164
MinHeight="480">
@@ -162,7 +170,7 @@
162170
<RowDefinition />
163171
<RowDefinition />
164172
</Grid.RowDefinitions>
165-
173+
166174
<Grid.ColumnDefinitions>
167175
<ColumnDefinition />
168176
<ColumnDefinition />

MaterialDesignThemes.Wpf/DrawerHost.cs

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,15 @@ public Brush? OverlayBackground
8686
set => SetValue(OverlayBackgroundProperty, value);
8787
}
8888

89+
public DrawerHostOpenMode OpenMode
90+
{
91+
get => (DrawerHostOpenMode)GetValue(OpenModeProperty);
92+
set => SetValue(OpenModeProperty, value);
93+
}
94+
95+
public static readonly DependencyProperty OpenModeProperty =
96+
DependencyProperty.Register("OpenMode", typeof(DrawerHostOpenMode), typeof(DrawerHost), new PropertyMetadata(DrawerHostOpenMode.Default));
97+
8998
#region top drawer
9099

91100
public static readonly DependencyProperty TopDrawerContentProperty = DependencyProperty.Register(
@@ -424,10 +433,7 @@ public event EventHandler<DrawerOpenedEventArgs> DrawerOpened
424433
remove { RemoveHandler(DrawerOpenedEvent, value); }
425434
}
426435

427-
protected void OnDrawerOpened(DrawerOpenedEventArgs eventArgs)
428-
{
429-
RaiseEvent(eventArgs);
430-
}
436+
protected void OnDrawerOpened(DrawerOpenedEventArgs eventArgs) => RaiseEvent(eventArgs);
431437

432438
#endregion
433439

@@ -449,10 +455,7 @@ public event EventHandler<DrawerClosingEventArgs> DrawerClosing
449455
remove { RemoveHandler(DrawerClosingEvent, value); }
450456
}
451457

452-
protected void OnDrawerClosing(DrawerClosingEventArgs eventArgs)
453-
{
454-
RaiseEvent(eventArgs);
455-
}
458+
protected void OnDrawerClosing(DrawerClosingEventArgs eventArgs) => RaiseEvent(eventArgs);
456459

457460
#endregion
458461

@@ -529,40 +532,32 @@ private void UpdateVisualStates(bool? useTransitions = null)
529532
var anyOpen = IsTopDrawerOpen || IsLeftDrawerOpen || IsBottomDrawerOpen || IsRightDrawerOpen;
530533

531534
VisualStateManager.GoToState(this,
532-
!anyOpen ? TemplateAllDrawersAllClosedStateName : TemplateAllDrawersAnyOpenStateName, useTransitions.HasValue ? useTransitions.Value : !TransitionAssist.GetDisableTransitions(this));
535+
!anyOpen ? TemplateAllDrawersAllClosedStateName : TemplateAllDrawersAnyOpenStateName, useTransitions ?? !TransitionAssist.GetDisableTransitions(this));
533536

534537
VisualStateManager.GoToState(this,
535-
IsLeftDrawerOpen ? TemplateLeftOpenStateName : TemplateLeftClosedStateName, useTransitions.HasValue ? useTransitions.Value : !TransitionAssist.GetDisableTransitions(this));
538+
IsLeftDrawerOpen ? TemplateLeftOpenStateName : TemplateLeftClosedStateName, useTransitions ?? !TransitionAssist.GetDisableTransitions(this));
536539

537540
VisualStateManager.GoToState(this,
538-
IsTopDrawerOpen ? TemplateTopOpenStateName : TemplateTopClosedStateName, useTransitions.HasValue ? useTransitions.Value : !TransitionAssist.GetDisableTransitions(this));
541+
IsTopDrawerOpen ? TemplateTopOpenStateName : TemplateTopClosedStateName, useTransitions ?? !TransitionAssist.GetDisableTransitions(this));
539542

540543
VisualStateManager.GoToState(this,
541-
IsRightDrawerOpen ? TemplateRightOpenStateName : TemplateRightClosedStateName, useTransitions.HasValue ? useTransitions.Value : !TransitionAssist.GetDisableTransitions(this));
544+
IsRightDrawerOpen ? TemplateRightOpenStateName : TemplateRightClosedStateName, useTransitions ?? !TransitionAssist.GetDisableTransitions(this));
542545

543546
VisualStateManager.GoToState(this,
544-
IsBottomDrawerOpen ? TemplateBottomOpenStateName : TemplateBottomClosedStateName, useTransitions.HasValue ? useTransitions.Value : !TransitionAssist.GetDisableTransitions(this));
547+
IsBottomDrawerOpen ? TemplateBottomOpenStateName : TemplateBottomClosedStateName, useTransitions ?? !TransitionAssist.GetDisableTransitions(this));
545548
}
546549

547550
private static void IsTopDrawerOpenPropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
548-
{
549-
IsDrawerOpenPropertyChanged(dependencyObject, dependencyPropertyChangedEventArgs, Dock.Top);
550-
}
551+
=> IsDrawerOpenPropertyChanged(dependencyObject, dependencyPropertyChangedEventArgs, Dock.Top);
551552

552553
private static void IsLeftDrawerOpenPropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
553-
{
554-
IsDrawerOpenPropertyChanged(dependencyObject, dependencyPropertyChangedEventArgs, Dock.Left);
555-
}
554+
=> IsDrawerOpenPropertyChanged(dependencyObject, dependencyPropertyChangedEventArgs, Dock.Left);
556555

557556
private static void IsRightDrawerOpenPropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
558-
{
559-
IsDrawerOpenPropertyChanged(dependencyObject, dependencyPropertyChangedEventArgs, Dock.Right);
560-
}
557+
=> IsDrawerOpenPropertyChanged(dependencyObject, dependencyPropertyChangedEventArgs, Dock.Right);
561558

562559
private static void IsBottomDrawerOpenPropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
563-
{
564-
IsDrawerOpenPropertyChanged(dependencyObject, dependencyPropertyChangedEventArgs, Dock.Bottom);
565-
}
560+
=> IsDrawerOpenPropertyChanged(dependencyObject, dependencyPropertyChangedEventArgs, Dock.Bottom);
566561

567562
private static void IsDrawerOpenPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs, Dock dock)
568563
{
@@ -630,9 +625,9 @@ private void OpenDrawerHandler(object sender, ExecutedRoutedEventArgs executedRo
630625

631626
private void SetOpenFlag(ExecutedRoutedEventArgs executedRoutedEventArgs, bool value)
632627
{
633-
if (executedRoutedEventArgs.Parameter is Dock)
628+
if (executedRoutedEventArgs.Parameter is Dock dock)
634629
{
635-
switch ((Dock)executedRoutedEventArgs.Parameter)
630+
switch (dock)
636631
{
637632
case Dock.Left:
638633
SetCurrentValue(IsLeftDrawerOpenProperty, value);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace MaterialDesignThemes.Wpf
2+
{
3+
public enum DrawerHostOpenMode
4+
{
5+
Default = 0,
6+
Model = 0,
7+
Standard = 1
8+
}
9+
}

0 commit comments

Comments
 (0)