Skip to content

Commit

Permalink
Fixes #549 by changing inheritance and adding support for templates
Browse files Browse the repository at this point in the history
  • Loading branch information
batzen committed Apr 2, 2018
1 parent d2c6e83 commit 9e1a9c4
Show file tree
Hide file tree
Showing 6 changed files with 168 additions and 127 deletions.
3 changes: 3 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
- [#471](../../issues/471) - **Drop support for .Net 4.0**
- [#515](../../issues/515) - Switch to new csproj format and require VS2017 for development
- [#545](../../issues/545) - SplitButton.IsChecked is not bound 2 way by default
- Due to [#549](../../issues/549) `RibbonGroupBox.Header` is now of type object and `RibbonGroupBox` now inherits from `HeaderedItemsControl` instead of `ItemsControl`.
Please have a look at the [documentation](http://fluentribbon.github.io/documentation/controls/ribbon-group-box#customizingHeader) for details.

- ### Bug fixes
- [#535](../../issues/535) - BorderBush on bottom of RibbonTabItem (and Ribbon)
Expand All @@ -17,6 +19,7 @@
- ### Enhancements
- [#533](../../issues/533) - Issue when using templated ribbon items
- [#544](../../issues/544) - Add proper DPI support for icons/images aquired through ObjectToImageConverter on .NET 4.6.2
- [#549](../../issues/549) - Implement RibbonGroupBox header template
- [#554](../../issues/554) - No Keytips on templated ribbon items.

## 6.1.0
Expand Down
12 changes: 11 additions & 1 deletion Fluent.Ribbon/Controls/RibbonControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,17 @@ public static void BindQuickAccessItem(FrameworkElement source, FrameworkElement

if (headeredControl != null)
{
Bind(source, element, nameof(IHeaderedControl.Header), HeaderProperty, BindingMode.OneWay);
if (headeredControl is HeaderedItemsControl)
{
Bind(source, element, nameof(HeaderedItemsControl.Header), HeaderedItemsControl.HeaderProperty, BindingMode.OneWay);
Bind(source, element, nameof(HeaderedItemsControl.HeaderStringFormat), HeaderedItemsControl.HeaderStringFormatProperty, BindingMode.OneWay);
Bind(source, element, nameof(HeaderedItemsControl.HeaderTemplate), HeaderedItemsControl.HeaderTemplateProperty, BindingMode.OneWay);
Bind(source, element, nameof(HeaderedItemsControl.HeaderTemplateSelector), HeaderedItemsControl.HeaderTemplateSelectorProperty, BindingMode.OneWay);
}
else
{
Bind(source, element, nameof(IHeaderedControl.Header), HeaderProperty, BindingMode.OneWay);
}

if (source.ToolTip != null
|| BindingOperations.IsDataBound(source, ToolTipProperty))
Expand Down
53 changes: 26 additions & 27 deletions Fluent.Ribbon/Controls/RibbonGroupBox.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ namespace Fluent
[TemplatePart(Name = "PART_DialogLauncherButton", Type = typeof(Button))]
[TemplatePart(Name = "PART_Popup", Type = typeof(Popup))]
[TemplatePart(Name = "PART_UpPanel", Type = typeof(Panel))]
public class RibbonGroupBox : ItemsControl, IQuickAccessItemProvider, IDropDownControl, IKeyTipedControl, IHeaderedControl
public class RibbonGroupBox : HeaderedItemsControl, IQuickAccessItemProvider, IDropDownControl, IKeyTipedControl, IHeaderedControl
{
#region Fields

Expand Down Expand Up @@ -64,6 +64,31 @@ public string KeyTip

#endregion

#region Header-Options

/// <summary>
/// <see cref="DependencyProperty"/> for IsCollapsedHeaderContentPresenter.
/// </summary>
public static readonly DependencyProperty IsCollapsedHeaderContentPresenterProperty = DependencyProperty.RegisterAttached("IsCollapsedHeaderContentPresenter", typeof(bool), typeof(RibbonGroupBox), new PropertyMetadata(default(bool)));

/// <summary>
/// Sets the value of <see cref="IsCollapsedHeaderContentPresenterProperty"/>.
/// </summary>
public static void SetIsCollapsedHeaderContentPresenter(DependencyObject element, bool value)
{
element.SetValue(IsCollapsedHeaderContentPresenterProperty, value);
}

/// <summary>
/// Gets the value of <see cref="IsCollapsedHeaderContentPresenterProperty"/>.
/// </summary>
public static bool GetIsCollapsedHeaderContentPresenter(DependencyObject element)
{
return (bool)element.GetValue(IsCollapsedHeaderContentPresenterProperty);
}

#endregion

/// <summary>
/// Gets drop down popup
/// </summary>
Expand Down Expand Up @@ -216,32 +241,6 @@ private void UpdateScalableControlSubscribing(bool registerEvents)

#endregion

#region Header

/// <summary>
/// Gets or sets group box header
/// </summary>
public string Header
{
get { return (string)this.GetValue(HeaderProperty); }
set { this.SetValue(HeaderProperty, value); }
}

/// <summary>
/// Using a DependencyProperty as the backing store for Header. This enables animation, styling, binding, etc...
/// </summary>
public static readonly DependencyProperty HeaderProperty =
DependencyProperty.Register(nameof(Header), typeof(string), typeof(RibbonGroupBox), new PropertyMetadata());

object IHeaderedControl.Header
{
get { return this.Header; }

set { this.Header = (string)value; }
}

#endregion

#region IsLauncherVisible

/// <summary>
Expand Down
1 change: 1 addition & 0 deletions Fluent.Ribbon/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
[assembly: XmlnsPrefix("urn:fluent-ribbon", "fluent")]
[assembly: XmlnsDefinition("urn:fluent-ribbon", "Fluent")]
[assembly: XmlnsDefinition("urn:fluent-ribbon", "Fluent.Converters")]
[assembly: XmlnsDefinition("urn:fluent-ribbon", "Fluent.TemplateSelectors")]
[assembly: XmlnsDefinition("urn:fluent-ribbon", "Fluent.Metro.Behaviours")]

[assembly: InternalsVisibleTo("Fluent.Tests")]
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
namespace Fluent.TemplateSelectors
{
using System.Windows;
using System.Windows.Controls;

/// <summary>
/// <see cref="DataTemplateSelector"/> for the header of <see cref="RibbonGroupBox"/>.
/// </summary>
public class RibbonGroupBoxHeaderTemplateSelector : DataTemplateSelector
{
/// <summary>
/// Gets a static instance of <see cref="RibbonGroupBoxHeaderTemplateSelector"/>.
/// </summary>
public static readonly RibbonGroupBoxHeaderTemplateSelector Instance = new RibbonGroupBoxHeaderTemplateSelector();

/// <inheritdoc />
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var element = (FrameworkElement)container;

if (RibbonGroupBox.GetIsCollapsedHeaderContentPresenter(element))
{
return (DataTemplate)element.FindResource("Fluent.Ribbon.Templates.RibbonGroupBox.TwoLineHeaderTemplate");
}

return (DataTemplate)element.FindResource("Fluent.Ribbon.Templates.RibbonGroupBox.OneLineHeaderTemplate");
}
}
}
Loading

0 comments on commit 9e1a9c4

Please sign in to comment.