diff --git a/src/Shared/HandyControl_Shared/Controls/Ribbon/RibbonTab.cs b/src/Shared/HandyControl_Shared/Controls/Ribbon/RibbonTab.cs
index 90a53309..e9db9547 100644
--- a/src/Shared/HandyControl_Shared/Controls/Ribbon/RibbonTab.cs
+++ b/src/Shared/HandyControl_Shared/Controls/Ribbon/RibbonTab.cs
@@ -2,7 +2,6 @@
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using HandyControl.Data;
-using HandyControl.Tools;
namespace HandyControl.Controls
{
@@ -75,11 +74,16 @@ namespace HandyControl.Controls
Ribbon?.NotifyTabHeaderChanged();
}
+ protected override DependencyObject GetContainerForItemOverride() => new RibbonGroup();
+
+ protected override bool IsItemItsOwnContainerOverride(object item) => item is RibbonGroup;
+
private static void OnVisibilityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ribbonTab = (RibbonTab) d;
- var ribbon = ribbonTab.Ribbon;
+ ribbonTab.RibbonTabHeader?.CoerceValue(VisibilityProperty);
+ var ribbon = ribbonTab.Ribbon;
if (ribbon == null ||
!ribbonTab.IsSelected ||
(Visibility) e.OldValue != Visibility.Visible ||
@@ -90,9 +94,5 @@ namespace HandyControl.Controls
ribbon.ResetSelection();
}
-
- protected override DependencyObject GetContainerForItemOverride() => new RibbonGroup();
-
- protected override bool IsItemItsOwnContainerOverride(object item) => item is RibbonGroup;
}
}
diff --git a/src/Shared/HandyControl_Shared/Controls/Ribbon/RibbonTabHeader.cs b/src/Shared/HandyControl_Shared/Controls/Ribbon/RibbonTabHeader.cs
index 74c2028b..a45defbf 100644
--- a/src/Shared/HandyControl_Shared/Controls/Ribbon/RibbonTabHeader.cs
+++ b/src/Shared/HandyControl_Shared/Controls/Ribbon/RibbonTabHeader.cs
@@ -25,16 +25,15 @@ namespace HandyControl.Controls
}
}
+ static RibbonTabHeader()
+ {
+ VisibilityProperty.OverrideMetadata(typeof(RibbonTabHeader), new FrameworkPropertyMetadata(null, CoerceVisibility));
+ }
+
public static readonly DependencyProperty IsSelectedProperty = DependencyProperty.Register(
"IsSelected", typeof(bool), typeof(RibbonTabHeader),
new PropertyMetadata(ValueBoxes.FalseBox, OnIsSelectedChanged, CoerceIsSelected));
- private static object CoerceIsSelected(DependencyObject d, object basevalue)
- {
- var ribbonTab = ((RibbonTabHeader) d).RibbonTab;
- return ribbonTab != null ? ValueBoxes.BooleanBox(ribbonTab.IsSelected) : basevalue;
- }
-
private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((RibbonTabHeader) d).OnIsSelectedChanged((bool) e.OldValue, (bool) e.NewValue);
@@ -49,6 +48,7 @@ namespace HandyControl.Controls
internal void PrepareRibbonTabHeader()
{
CoerceValue(IsSelectedProperty);
+ CoerceValue(VisibilityProperty);
}
protected virtual void OnIsSelectedChanged(bool oldIsSelected, bool newIsSelected)
@@ -80,5 +80,17 @@ namespace HandyControl.Controls
ribbonTab.IsSelected = true;
}
+
+ private static object CoerceIsSelected(DependencyObject d, object basevalue)
+ {
+ var ribbonTab = ((RibbonTabHeader) d).RibbonTab;
+ return ribbonTab != null ? ValueBoxes.BooleanBox(ribbonTab.IsSelected) : basevalue;
+ }
+
+ private static object CoerceVisibility(DependencyObject d, object basevalue)
+ {
+ var ribbonTab = ((RibbonTabHeader) d).RibbonTab;
+ return ribbonTab != null ? ValueBoxes.VisibilityBox(ribbonTab.Visibility) : basevalue;
+ }
}
}
diff --git a/src/Shared/HandyControl_Shared/Data/ValueBoxes.cs b/src/Shared/HandyControl_Shared/Data/ValueBoxes.cs
index 8e216bec..800ae300 100644
--- a/src/Shared/HandyControl_Shared/Data/ValueBoxes.cs
+++ b/src/Shared/HandyControl_Shared/Data/ValueBoxes.cs
@@ -1,4 +1,6 @@
-using System.Windows.Controls;
+using System;
+using System.Windows;
+using System.Windows.Controls;
namespace HandyControl.Data;
@@ -15,10 +17,18 @@ internal static class ValueBoxes
internal static object HorizontalBox = Orientation.Horizontal;
+ internal static object VisibleBox = Visibility.Visible;
+
+ internal static object CollapsedBox = Visibility.Collapsed;
+
+ internal static object HiddenBox = Visibility.Hidden;
+
internal static object Double0Box = .0;
internal static object Double01Box = .1;
+ internal static object Double0Box = .0;
+
internal static object Double1Box = 1.0;
internal static object Double10Box = 10.0;
@@ -47,4 +57,15 @@ internal static class ValueBoxes
internal static object OrientationBox(Orientation value) =>
value == Orientation.Horizontal ? HorizontalBox : VerticalBox;
+
+ internal static object VisibilityBox(Visibility value)
+ {
+ return value switch
+ {
+ Visibility.Visible => VisibleBox,
+ Visibility.Hidden => HiddenBox,
+ Visibility.Collapsed => CollapsedBox,
+ _ => throw new ArgumentOutOfRangeException(nameof(value), value, null)
+ };
+ }
}
diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Ribbon.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Ribbon.xaml
index 2f0b7cf9..48c6d4db 100644
--- a/src/Shared/HandyControl_Shared/Themes/Styles/Ribbon.xaml
+++ b/src/Shared/HandyControl_Shared/Themes/Styles/Ribbon.xaml
@@ -51,6 +51,7 @@
+
@@ -59,10 +60,12 @@
-
-
-
-
+
+
+
+
+
+