Skip to content

Commit

Permalink
Fix CloseButtonMargin usage
Browse files Browse the repository at this point in the history
  Use template binding and remove unnecessary code behind
  Remove old not working unnecessary code from ControlsHelper
  • Loading branch information
punker76 committed Feb 25, 2017
1 parent f6d45ef commit d1ac364
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 73 deletions.
@@ -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
37 changes: 3 additions & 34 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 = CloseButtonMargin;
}
}

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 @@ -133,9 +103,8 @@ public object CloseTabCommandParameter
DependencyProperty.Register("CloseButtonMargin",
typeof(Thickness),
typeof(MetroTabItem),
new FrameworkPropertyMetadata(new Thickness(0,0,2,0),
FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.Inherits,
OnCloseButtonEnabledPropertyChangedCallback));
new FrameworkPropertyMetadata(new Thickness(),
FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.Inherits));

/// <summary>
/// Gets/sets the Close Button Margin.
Expand Down
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="{DynamicResource CloseButtonMargin}"
Margin="{TemplateBinding CloseButtonMargin}"
VerticalAlignment="Top"
Style="{DynamicResource ChromelessButtonStyle}"
Background="{DynamicResource GrayNormalBrush}"
Expand Down

0 comments on commit d1ac364

Please sign in to comment.