Skip to content

Commit 309d485

Browse files
committed
Feature: Expander state
1 parent a8b27ef commit 309d485

File tree

5 files changed

+210
-21
lines changed

5 files changed

+210
-21
lines changed

Source/NETworkManager/Views/DNSLookupHostView.xaml

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
xmlns:dockablz="clr-namespace:Dragablz.Dockablz;assembly=Dragablz"
88
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
99
xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
10+
xmlns:controls="clr-namespace:NETworkManager.Controls;assembly=NETworkManager.Controls"
1011
xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
1112
xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
1213
xmlns:settings="clr-namespace:NETworkManager.Settings;assembly=NETworkManager.Settings"
1314
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
1415
xmlns:profiles="clr-namespace:NETworkManager.Profiles;assembly=NETworkManager.Profiles"
16+
xmlns:wpfHelpers="clr-namespace:NETworkManager.Utilities.WPF;assembly=NETworkManager.Utilities.WPF"
1517
xmlns:networkManager="clr-namespace:NETworkManager"
1618
mc:Ignorable="d" d:DataContext="{d:DesignInstance viewModels:DNSLookupHostViewModel}">
1719
<UserControl.Resources>
@@ -20,6 +22,7 @@
2022
<converters:IntNotZeroToVisibilityCollapsedConverter x:Key="IntNotZeroToVisibilityCollapsedConverter" />
2123
<converters:IntZeroToVisibilityCollapsedConverter x:Key="IntZeroToVisibilityCollapsedConverter" />
2224
<converters:StringNullOrEmptyToBoolConverter x:Key="StringNullOrEmptyToBoolConverter" />
25+
<wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
2326
</UserControl.Resources>
2427
<UserControl.InputBindings>
2528
<KeyBinding Key="T" Modifiers="Ctrl" Command="{Binding AddTabCommand}" />
@@ -412,15 +415,50 @@
412415
<Setter Property="Template">
413416
<Setter.Value>
414417
<ControlTemplate>
415-
<Expander IsExpanded="True"
416-
Style="{StaticResource DefaultExpander}">
418+
<controls:GroupExpander
419+
Style="{StaticResource DefaultExpander}"
420+
StateStore="{Binding Path=DataContext.GroupExpanderStateStore, RelativeSource={RelativeSource AncestorType=ListBox}}"
421+
GroupName="{Binding Path=(CollectionViewGroup.Name)}">
417422
<Expander.Header>
418423
<Grid>
419424
<Grid.ColumnDefinitions>
420425
<ColumnDefinition Width="*" />
421426
<ColumnDefinition Width="10" />
422427
<ColumnDefinition Width="Auto" />
423428
</Grid.ColumnDefinitions>
429+
<Grid.ContextMenu>
430+
<ContextMenu
431+
Style="{StaticResource DefaultContextMenu}">
432+
<MenuItem
433+
Header="{x:Static Member=localization:Strings.ExpandAll}"
434+
Command="{Binding Path=Data.(viewModels:DNSLookupHostViewModel.ExpandAllProfileGroupsCommand), Source={StaticResource BindingProxy}}">
435+
<MenuItem.Icon>
436+
<Rectangle Width="16" Height="16"
437+
Fill="{DynamicResource ResourceKey=MahApps.Brushes.Gray3}">
438+
<Rectangle.OpacityMask>
439+
<VisualBrush
440+
Stretch="Uniform"
441+
Visual="{iconPacks:Material Kind=PlusBoxMultipleOutline}" />
442+
</Rectangle.OpacityMask>
443+
</Rectangle>
444+
</MenuItem.Icon>
445+
</MenuItem>
446+
<MenuItem
447+
Header="{x:Static Member=localization:Strings.CollapseAll}"
448+
Command="{Binding Path=Data.(viewModels:DNSLookupHostViewModel.CollapseAllProfileGroupsCommand), Source={StaticResource BindingProxy}}">
449+
<MenuItem.Icon>
450+
<Rectangle Width="16" Height="16"
451+
Fill="{DynamicResource ResourceKey=MahApps.Brushes.Gray3}">
452+
<Rectangle.OpacityMask>
453+
<VisualBrush
454+
Stretch="Uniform"
455+
Visual="{iconPacks:Material Kind=MinusBoxMultipleOutline}" />
456+
</Rectangle.OpacityMask>
457+
</Rectangle>
458+
</MenuItem.Icon>
459+
</MenuItem>
460+
</ContextMenu>
461+
</Grid.ContextMenu>
424462
<Rectangle Grid.Column="0" Grid.ColumnSpan="3"
425463
Fill="Transparent" />
426464
<TextBlock Grid.Column="0"
@@ -456,7 +494,7 @@
456494
</Grid>
457495
</Expander.Header>
458496
<ItemsPresenter />
459-
</Expander>
497+
</controls:GroupExpander>
460498
</ControlTemplate>
461499
</Setter.Value>
462500
</Setter>

Source/NETworkManager/Views/IPScannerHostView.xaml

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
xmlns:dockablz="clr-namespace:Dragablz.Dockablz;assembly=Dragablz"
88
xmlns:iconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
99
xmlns:converters="clr-namespace:NETworkManager.Converters;assembly=NETworkManager.Converters"
10+
xmlns:controls="clr-namespace:NETworkManager.Controls;assembly=NETworkManager.Controls"
1011
xmlns:viewModels="clr-namespace:NETworkManager.ViewModels"
1112
xmlns:localization="clr-namespace:NETworkManager.Localization.Resources;assembly=NETworkManager.Localization"
1213
xmlns:settings="clr-namespace:NETworkManager.Settings;assembly=NETworkManager.Settings"
1314
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
1415
xmlns:profiles="clr-namespace:NETworkManager.Profiles;assembly=NETworkManager.Profiles"
16+
xmlns:wpfHelpers="clr-namespace:NETworkManager.Utilities.WPF;assembly=NETworkManager.Utilities.WPF"
1517
xmlns:networkManager="clr-namespace:NETworkManager"
1618
mc:Ignorable="d" d:DataContext="{d:DesignInstance viewModels:IPScannerHostViewModel}">
1719
<UserControl.Resources>
@@ -20,6 +22,7 @@
2022
<converters:IntNotZeroToVisibilityCollapsedConverter x:Key="IntNotZeroToVisibilityCollapsedConverter" />
2123
<converters:IntZeroToVisibilityCollapsedConverter x:Key="IntZeroToVisibilityCollapsedConverter" />
2224
<converters:StringNullOrEmptyToBoolConverter x:Key="StringNullOrEmptyToBoolConverter" />
25+
<wpfHelpers:BindingProxy x:Key="BindingProxy" Data="{Binding}" />
2326
</UserControl.Resources>
2427
<UserControl.InputBindings>
2528
<KeyBinding Key="T" Modifiers="Ctrl" Command="{Binding AddTabCommand}" />
@@ -413,15 +416,50 @@
413416
<Setter Property="Template">
414417
<Setter.Value>
415418
<ControlTemplate>
416-
<Expander IsExpanded="True"
417-
Style="{StaticResource DefaultExpander}">
419+
<controls:GroupExpander
420+
Style="{StaticResource DefaultExpander}"
421+
StateStore="{Binding Path=DataContext.GroupExpanderStateStore, RelativeSource={RelativeSource AncestorType=ListBox}}"
422+
GroupName="{Binding Path=(CollectionViewGroup.Name)}">
418423
<Expander.Header>
419424
<Grid>
420425
<Grid.ColumnDefinitions>
421426
<ColumnDefinition Width="*" />
422427
<ColumnDefinition Width="10" />
423428
<ColumnDefinition Width="Auto" />
424429
</Grid.ColumnDefinitions>
430+
<Grid.ContextMenu>
431+
<ContextMenu
432+
Style="{StaticResource DefaultContextMenu}">
433+
<MenuItem
434+
Header="{x:Static Member=localization:Strings.ExpandAll}"
435+
Command="{Binding Path=Data.(viewModels:IPScannerHostViewModel.ExpandAllProfileGroupsCommand), Source={StaticResource BindingProxy}}">
436+
<MenuItem.Icon>
437+
<Rectangle Width="16" Height="16"
438+
Fill="{DynamicResource ResourceKey=MahApps.Brushes.Gray3}">
439+
<Rectangle.OpacityMask>
440+
<VisualBrush
441+
Stretch="Uniform"
442+
Visual="{iconPacks:Material Kind=PlusBoxMultipleOutline}" />
443+
</Rectangle.OpacityMask>
444+
</Rectangle>
445+
</MenuItem.Icon>
446+
</MenuItem>
447+
<MenuItem
448+
Header="{x:Static Member=localization:Strings.CollapseAll}"
449+
Command="{Binding Path=Data.(viewModels:IPScannerHostViewModel.CollapseAllProfileGroupsCommand), Source={StaticResource BindingProxy}}">
450+
<MenuItem.Icon>
451+
<Rectangle Width="16" Height="16"
452+
Fill="{DynamicResource ResourceKey=MahApps.Brushes.Gray3}">
453+
<Rectangle.OpacityMask>
454+
<VisualBrush
455+
Stretch="Uniform"
456+
Visual="{iconPacks:Material Kind=MinusBoxMultipleOutline}" />
457+
</Rectangle.OpacityMask>
458+
</Rectangle>
459+
</MenuItem.Icon>
460+
</MenuItem>
461+
</ContextMenu>
462+
</Grid.ContextMenu>
425463
<Rectangle Grid.Column="0" Grid.ColumnSpan="3"
426464
Fill="Transparent" />
427465
<TextBlock Grid.Column="0"
@@ -457,7 +495,7 @@
457495
</Grid>
458496
</Expander.Header>
459497
<ItemsPresenter />
460-
</Expander>
498+
</controls:GroupExpander>
461499
</ControlTemplate>
462500
</Setter.Value>
463501
</Setter>

0 commit comments

Comments
 (0)