forked from MahApps/MahApps.Metro
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
303 additions
and
39 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
using System.Windows; | ||
using System.Windows.Interactivity; | ||
|
||
namespace MahApps.Metro.Behaviours | ||
{ | ||
public class StylizedBehaviorCollection : FreezableCollection<Behavior> | ||
{ | ||
#region Methods (protected) | ||
protected override Freezable CreateInstanceCore() | ||
{ | ||
return new StylizedBehaviorCollection(); | ||
} | ||
#endregion | ||
} | ||
|
||
public class StylizedBehaviors | ||
{ | ||
#region Fields (private) | ||
private static readonly DependencyProperty OriginalBehaviorProperty = | ||
DependencyProperty.RegisterAttached( | ||
@"OriginalBehaviorInternal", typeof(Behavior), typeof(StylizedBehaviors), new UIPropertyMetadata(null)); | ||
#endregion | ||
|
||
#region Fields (public) | ||
public static readonly DependencyProperty BehaviorsProperty = DependencyProperty.RegisterAttached( | ||
@"Behaviors", | ||
typeof(StylizedBehaviorCollection), | ||
typeof(StylizedBehaviors), | ||
new FrameworkPropertyMetadata(null, OnPropertyChanged)); | ||
#endregion | ||
|
||
#region Static Methods (public) | ||
public static StylizedBehaviorCollection GetBehaviors(DependencyObject uie) | ||
{ | ||
return (StylizedBehaviorCollection)uie.GetValue(BehaviorsProperty); | ||
} | ||
|
||
public static void SetBehaviors(DependencyObject uie, StylizedBehaviorCollection value) | ||
{ | ||
uie.SetValue(BehaviorsProperty, value); | ||
} | ||
#endregion | ||
|
||
#region Static Methods (private) | ||
private static Behavior GetOriginalBehavior(DependencyObject obj) | ||
{ | ||
return obj.GetValue(OriginalBehaviorProperty) as Behavior; | ||
} | ||
|
||
private static int GetIndexOf(BehaviorCollection itemBehaviors, Behavior behavior) | ||
{ | ||
int index = -1; | ||
|
||
Behavior orignalBehavior = GetOriginalBehavior(behavior); | ||
|
||
for (int i = 0; i < itemBehaviors.Count; i++) | ||
{ | ||
Behavior currentBehavior = itemBehaviors[i]; | ||
|
||
if (currentBehavior == behavior | ||
|| currentBehavior == orignalBehavior) | ||
{ | ||
index = i; | ||
break; | ||
} | ||
|
||
Behavior currentOrignalBehavior = GetOriginalBehavior(currentBehavior); | ||
|
||
if (currentOrignalBehavior == behavior | ||
|| currentOrignalBehavior == orignalBehavior) | ||
{ | ||
index = i; | ||
break; | ||
} | ||
} | ||
|
||
return index; | ||
} | ||
|
||
private static void OnPropertyChanged(DependencyObject dpo, DependencyPropertyChangedEventArgs e) | ||
{ | ||
var uie = dpo as UIElement; | ||
|
||
if (uie == null) | ||
{ | ||
return; | ||
} | ||
|
||
BehaviorCollection itemBehaviors = Interaction.GetBehaviors(uie); | ||
|
||
var newBehaviors = e.NewValue as StylizedBehaviorCollection; | ||
var oldBehaviors = e.OldValue as StylizedBehaviorCollection; | ||
|
||
if (newBehaviors == oldBehaviors) | ||
{ | ||
return; | ||
} | ||
|
||
if (oldBehaviors != null) | ||
{ | ||
foreach (var behavior in oldBehaviors) | ||
{ | ||
int index = GetIndexOf(itemBehaviors, behavior); | ||
|
||
if (index >= 0) | ||
{ | ||
itemBehaviors.RemoveAt(index); | ||
} | ||
} | ||
} | ||
|
||
if (newBehaviors != null) | ||
{ | ||
foreach (var behavior in newBehaviors) | ||
{ | ||
int index = GetIndexOf(itemBehaviors, behavior); | ||
|
||
if (index < 0) | ||
{ | ||
var clone = (Behavior)behavior.Clone(); | ||
SetOriginalBehavior(clone, behavior); | ||
itemBehaviors.Add(clone); | ||
} | ||
} | ||
} | ||
} | ||
|
||
private static void SetOriginalBehavior(DependencyObject obj, Behavior value) | ||
{ | ||
obj.SetValue(OriginalBehaviorProperty, value); | ||
} | ||
#endregion | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
using System.Windows; | ||
using System.Windows.Input; | ||
|
||
namespace MahApps.Metro.Controls | ||
{ | ||
[TemplatePart(Name = "PART_TitleBar", Type = typeof(UIElement))] | ||
public class MetroWindow : Window | ||
{ | ||
static MetroWindow() | ||
{ | ||
DefaultStyleKeyProperty.OverrideMetadata(typeof(MetroWindow), new FrameworkPropertyMetadata(typeof(MetroWindow))); | ||
} | ||
|
||
public override void OnApplyTemplate() | ||
{ | ||
base.OnApplyTemplate(); | ||
MouseDown += TitleBarMouseDown; | ||
} | ||
|
||
private void TitleBarMouseDown(object sender, MouseButtonEventArgs e) | ||
{ | ||
if (e.RightButton != MouseButtonState.Pressed && e.MiddleButton != MouseButtonState.Pressed && e.LeftButton == MouseButtonState.Pressed) | ||
DragMove(); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
using System; | ||
using System.Globalization; | ||
using System.Windows; | ||
using System.Windows.Data; | ||
using System.Windows.Markup; | ||
|
||
namespace MahApps.Metro.Converters | ||
{ | ||
[MarkupExtensionReturnType(typeof(IValueConverter))] | ||
public abstract class MarkupConverter : MarkupExtension, IValueConverter | ||
{ | ||
public override object ProvideValue(IServiceProvider serviceProvider) | ||
{ | ||
return this; | ||
} | ||
|
||
protected abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture); | ||
protected abstract object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture); | ||
|
||
#region IValueConverter Members | ||
|
||
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) | ||
{ | ||
try | ||
{ | ||
return Convert(value, targetType, parameter, culture); | ||
} | ||
catch | ||
{ | ||
return DependencyProperty.UnsetValue; | ||
} | ||
} | ||
|
||
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) | ||
{ | ||
try | ||
{ | ||
return ConvertBack(value, targetType, parameter, culture); | ||
} | ||
catch | ||
{ | ||
return DependencyProperty.UnsetValue; | ||
} | ||
} | ||
|
||
#endregion | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.