RibbonTabHeader support for Collapsed

This commit is contained in:
NaBian committed 2022-06-13 23:06:48 +08:00
1 parent 03a4777d29
commit 740ac6d4a3
4 files changed
+53 -17

No files matched your search

@@ -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;
}
}
@@ -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;
}
}
}