Skip to content

Commit

Permalink
Merge branch 'schdck-tabitem-closebutton-expose-margin' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
punker76 committed Feb 25, 2017
2 parents 3d62903 + 5bd528d commit b4fd541
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 70 deletions.
1 change: 1 addition & 0 deletions docs/release-notes/1.5.0.md
Expand Up @@ -13,6 +13,7 @@
- If `ShowInTaskbar = false`, when double click on the title bar of a minimized window, the window will be restored instead of maximized. [#2854](https://github.com/MahApps/MahApps.Metro/pull/2854) [@hausenism](https://github.com/hausenism)
- Fix WindowCommands tab stop bug [#2858](https://github.com/MahApps/MahApps.Metro/pull/2858) [@neilt6](https://github.com/neilt6)
- Don't overwrite cancellation for window close event [#2868](https://github.com/MahApps/MahApps.Metro/pull/2868) [@batzen](https://github.com/batzen)
- Expose close button margin for `MetroTabItem` [#2803](https://github.com/MahApps/MahApps.Metro/pull/2803)

## Closed Issues

Expand Down
@@ -1,13 +1,12 @@
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;

namespace MahApps.Metro.Controls
{
using System.ComponentModel;
using System.Windows.Controls.Primitives;

/// <summary>
/// A helper class that provides various controls.
/// </summary>
Expand Down Expand Up @@ -68,41 +67,7 @@ public static void SetContentCharacterCasing(UIElement element, CharacterCasing
}

public static readonly DependencyProperty HeaderFontSizeProperty =
DependencyProperty.RegisterAttached("HeaderFontSize", typeof(double), typeof(ControlsHelper), new FrameworkPropertyMetadata(SystemFonts.MessageFontSize, HeaderFontSizePropertyChangedCallback){ Inherits = true});

private static void HeaderFontSizePropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue is double)
{
// close button only for MetroTabItem
var metroTabItem = dependencyObject as MetroTabItem;
if (metroTabItem == null)
{
return;
}

if (metroTabItem.closeButton == null)
{
metroTabItem.ApplyTemplate();
}

if (metroTabItem.closeButton != null && metroTabItem.contentSite != null)
{
// punker76: i don't like this! i think this must be done with xaml.
var fontDpiSize = (double)e.NewValue;
var fontHeight = Math.Ceiling(fontDpiSize * metroTabItem.FontFamily.LineSpacing);
var newMargin = (Math.Round(fontHeight) / 2.8)
- metroTabItem.Padding.Top - metroTabItem.Padding.Bottom
- metroTabItem.contentSite.Margin.Top - metroTabItem.contentSite.Margin.Bottom;

var previousMargin = metroTabItem.closeButton.Margin;
metroTabItem.newButtonMargin = new Thickness(previousMargin.Left, newMargin, previousMargin.Right, previousMargin.Bottom);
metroTabItem.closeButton.Margin = metroTabItem.newButtonMargin;

metroTabItem.closeButton.UpdateLayout();
}
}
}
DependencyProperty.RegisterAttached("HeaderFontSize", typeof(double), typeof(ControlsHelper), new FrameworkPropertyMetadata(SystemFonts.MessageFontSize){ Inherits = true});

[Category(AppName.MahApps)]
[AttachedPropertyBrowsableForType(typeof(HeaderedContentControl))]
Expand Down
48 changes: 17 additions & 31 deletions src/MahApps.Metro/MahApps.Metro.Shared/Controls/MetroTabItem.cs
Expand Up @@ -40,42 +40,12 @@ private bool InternalCloseTabCommandCanExecute(object o)
return closeTabCommand == null || closeTabCommand.CanExecute(this.CloseTabCommandParameter ?? this);
}

internal Button closeButton;
internal Thickness newButtonMargin;
internal ContentPresenter contentSite;
private bool closeButtonClickUnloaded;

public override void OnApplyTemplate()
{
base.OnApplyTemplate();

this.AdjustCloseButton();

contentSite = GetTemplateChild("ContentSite") as ContentPresenter;
}

private void AdjustCloseButton()
{
closeButton = closeButton ?? GetTemplateChild("PART_CloseButton") as Button;
if (closeButton != null)
{
closeButton.Margin = newButtonMargin;
}
}

public static readonly DependencyProperty CloseButtonEnabledProperty =
DependencyProperty.Register("CloseButtonEnabled",
typeof(bool),
typeof(MetroTabItem),
new FrameworkPropertyMetadata(false,
FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.Inherits,
OnCloseButtonEnabledPropertyChangedCallback));

private static void OnCloseButtonEnabledPropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
var item = dependencyObject as MetroTabItem;
item?.AdjustCloseButton();
}
FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.Inherits));

/// <summary>
/// Gets/sets whether the Close Button is visible.
Expand Down Expand Up @@ -128,5 +98,21 @@ public object CloseTabCommandParameter
get { return GetValue(CloseTabCommandParameterProperty); }
set { SetValue(CloseTabCommandParameterProperty, value); }
}

public static readonly DependencyProperty CloseButtonMarginProperty =
DependencyProperty.Register("CloseButtonMargin",
typeof(Thickness),
typeof(MetroTabItem),
new FrameworkPropertyMetadata(new Thickness(),
FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.Inherits));

/// <summary>
/// Gets/sets the Close Button Margin.
/// </summary>
public Thickness CloseButtonMargin
{
get { return (Thickness)GetValue(CloseButtonMarginProperty); }
set { SetValue(CloseButtonEnabledProperty, value); }
}
}
}
2 changes: 1 addition & 1 deletion src/MahApps.Metro/MahApps.Metro/Themes/MetroTabItem.xaml
Expand Up @@ -60,7 +60,7 @@
CommandParameter="{TemplateBinding CloseTabCommandParameter}"
Width="{TemplateBinding Controls:ControlsHelper.HeaderFontSize, Converter={StaticResource MetroTabItemCloseButtonWidthConverter}}"
Height="{Binding RelativeSource={RelativeSource Self}, Path=Width, Mode=OneWay}"
Margin="0 0 2 0"
Margin="{TemplateBinding CloseButtonMargin}"
VerticalAlignment="Top"
Style="{DynamicResource ChromelessButtonStyle}"
Background="{DynamicResource GrayNormalBrush}"
Expand Down

0 comments on commit b4fd541

Please sign in to comment.