Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .paket/paket.exe
Binary file not shown.
10 changes: 5 additions & 5 deletions MahApps.Metro/Controls/Dialogs/MessageDialog.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using ControlzEx;

namespace MahApps.Metro.Controls.Dialogs
{
Expand Down Expand Up @@ -42,16 +42,16 @@ internal Task<MessageDialogResult> WaitForButtonPressAsync()
switch (defaultButtonFocus)
{
case MessageDialogResult.Affirmative:
PART_AffirmativeButton.Focus();
KeyboardNavigationEx.Focus(PART_AffirmativeButton);
break;
case MessageDialogResult.Negative:
PART_NegativeButton.Focus();
KeyboardNavigationEx.Focus(PART_NegativeButton);
break;
case MessageDialogResult.FirstAuxiliary:
PART_FirstAuxiliaryButton.Focus();
KeyboardNavigationEx.Focus(PART_FirstAuxiliaryButton);
break;
case MessageDialogResult.SecondAuxiliary:
PART_SecondAuxiliaryButton.Focus();
KeyboardNavigationEx.Focus(PART_SecondAuxiliaryButton);
break;
}
}));
Expand Down
6 changes: 5 additions & 1 deletion MahApps.Metro/MahApps.Metro.NET45.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,10 @@
<AssemblyOriginatorKeyFile>mahapps.metro.pfx</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\paket-files\ControlzEx\ControlzEx\src\ControlzEx\KeyboardNavigationEx.cs">
<Paket>True</Paket>
<Link>ControlzEx/KeyboardNavigationEx.cs</Link>
</Compile>
<Compile Include="..\paket-files\ControlzEx\ControlzEx\src\ControlzEx\PackIconBase.cs">
<Paket>True</Paket>
<Link>ControlzEx/PackIconBase.cs</Link>
Expand Down Expand Up @@ -815,7 +819,7 @@
<Target Name="AfterCompile" />
<Import Project="..\.paket\paket.targets" />
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2')">
<ItemGroup>
<Reference Include="JetBrains.Annotations">
<HintPath>..\packages\JetBrains.Annotations\lib\net20\JetBrains.Annotations.dll</HintPath>
Expand Down
6 changes: 5 additions & 1 deletion MahApps.Metro/MahApps.Metro.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@
<AssemblyOriginatorKeyFile>mahapps.metro.pfx</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\paket-files\ControlzEx\ControlzEx\src\ControlzEx\KeyboardNavigationEx.cs">
<Paket>True</Paket>
<Link>ControlzEx/KeyboardNavigationEx.cs</Link>
</Compile>
<Compile Include="..\paket-files\ControlzEx\ControlzEx\src\ControlzEx\PackIconBase.cs">
<Paket>True</Paket>
<Link>ControlzEx/PackIconBase.cs</Link>
Expand Down Expand Up @@ -783,7 +787,7 @@
<Target Name="AfterCompile" />
<Import Project="..\.paket\paket.targets" />
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2')">
<ItemGroup>
<Reference Include="JetBrains.Annotations">
<HintPath>..\packages\JetBrains.Annotations\lib\net20\JetBrains.Annotations.dll</HintPath>
Expand Down
1 change: 1 addition & 0 deletions MahApps.Metro/paket.references
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
JetBrains.Annotations
File:KeyboardNavigationEx.cs ControlzEx
File:PackIconBase.cs ControlzEx
10 changes: 5 additions & 5 deletions Mahapps.Metro.Tests/Mahapps.Metro.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2')">
<PropertyGroup>
<__paket__Microsoft_Bcl_Build_targets>Microsoft.Bcl.Build</__paket__Microsoft_Bcl_Build_targets>
</PropertyGroup>
Expand All @@ -180,7 +180,7 @@
-->
<Import Project="..\.paket\paket.targets" />
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2')">
<ItemGroup>
<Reference Include="ExposedObject">
<HintPath>..\packages\ExposedObject\lib\net40\ExposedObject.dll</HintPath>
Expand All @@ -191,7 +191,7 @@
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2')">
<ItemGroup>
<Reference Include="JetBrains.Annotations">
<HintPath>..\packages\JetBrains.Annotations\lib\net20\JetBrains.Annotations.dll</HintPath>
Expand Down Expand Up @@ -244,7 +244,7 @@
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2')">
<ItemGroup>
<Reference Include="xunit">
<HintPath>..\packages\xunit\lib\net20\xunit.dll</HintPath>
Expand All @@ -255,7 +255,7 @@
</When>
</Choose>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2')">
<ItemGroup>
<Reference Include="xunit.extensions">
<HintPath>..\packages\xunit.extensions\lib\net20\xunit.extensions.dll</HintPath>
Expand Down
1 change: 1 addition & 0 deletions docs/release-notes/1.3.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,3 +130,4 @@ MahApps.Metro v1.3.0 bug fix and feature release.
- #2477 Create a custom Thumb for the title DragMove
- #2449 Visual bug while using RightWindowCommands
- #2495 Default for ControlsHelper.HeaderFontSizeProperty should be SystemFonts.MessageFontSize
- #2479 DefaultButtonFocus Not Working As Expected PR #2505
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
using System;
using System.Reflection;
using System.Windows;
using System.Windows.Input;
using System.Windows.Threading;

namespace ControlzEx
{
/// <summary>
/// Helper class for a common focusing problem.
/// The focus itself isn't the problem. If we use the common focusing methods the control get the focus
/// but it doesn't get the focus visual style.
/// The KeyboardNavigation class handles the visual style only if the control get the focus from a keyboard
/// device or if the SystemParameters.KeyboardCues is true.
/// </summary>
public sealed class KeyboardNavigationEx
{
private static KeyboardNavigationEx _instance;
//internal static bool AlwaysShowFocusVisual
private readonly PropertyInfo _alwaysShowFocusVisual;
//internal static void ShowFocusVisual()
private readonly MethodInfo _showFocusVisual;

// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static KeyboardNavigationEx()
{
}

private KeyboardNavigationEx()
{
var type = typeof(KeyboardNavigation);
_alwaysShowFocusVisual = type.GetProperty("AlwaysShowFocusVisual", BindingFlags.NonPublic | BindingFlags.Static);
_showFocusVisual = type.GetMethod("ShowFocusVisual", BindingFlags.NonPublic | BindingFlags.Static);
}

/// <summary>
/// Gets the KeyboardNavigationEx singleton instance.
/// </summary>
internal static KeyboardNavigationEx Instance => _instance ?? (_instance = new KeyboardNavigationEx());

/// <summary>
/// Shows the focus visual of the current focused UI element.
/// Works only together with AlwaysShowFocusVisual property.
/// </summary>
internal void ShowFocusVisualInternal()
{
_showFocusVisual.Invoke(null, null);
}

internal bool AlwaysShowFocusVisualInternal
{
get { return (bool) _alwaysShowFocusVisual.GetValue(null, null); }
set { _alwaysShowFocusVisual.SetValue(null, value, null); }
}

/// <summary>
/// Focuses the specified element and shows the focus visual style.
/// </summary>
/// <param name="element">The element which will be focused.</param>
public static void Focus(UIElement element)
{
element?.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
var keybHack = KeyboardNavigationEx.Instance;
var alwaysShowFocusVisual = keybHack.AlwaysShowFocusVisualInternal;
keybHack.AlwaysShowFocusVisualInternal = true;
try
{
Keyboard.Focus(element);
keybHack.ShowFocusVisualInternal();
}
finally
{
keybHack.AlwaysShowFocusVisualInternal = alwaysShowFocusVisual;
}
}));
}

/// <summary>
/// Attached DependencyProperty for setting AlwaysShowFocusVisual for a UI element.
/// </summary>
public static readonly DependencyProperty AlwaysShowFocusVisualProperty
= DependencyProperty.RegisterAttached("AlwaysShowFocusVisual",
typeof(bool),
typeof(KeyboardNavigationEx),
new FrameworkPropertyMetadata(default(bool), AlwaysShowFocusVisualPropertyChangedCallback));

private static void AlwaysShowFocusVisualPropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args)
{
var fe = dependencyObject as UIElement;
if (fe != null && args.NewValue != args.OldValue)
{
fe.GotFocus -= FrameworkElementGotFocus;
if ((bool)args.NewValue)
{
fe.GotFocus += FrameworkElementGotFocus;
}
}
}

private static void FrameworkElementGotFocus(object sender, RoutedEventArgs e)
{
KeyboardNavigationEx.Focus(sender as UIElement);
}

/// <summary>
/// Gets a the value which indicates if the UI element always show the focus visual style.
/// </summary>
[AttachedPropertyBrowsableForType(typeof(UIElement))]
public static bool GetAlwaysShowFocusVisual(UIElement element)
{
return (bool)element.GetValue(AlwaysShowFocusVisualProperty);
}

/// <summary>
/// Sets a the value which indicates if the UI element always show the focus visual style.
/// </summary>
public static void SetAlwaysShowFocusVisual(UIElement element, bool value)
{
element.SetValue(AlwaysShowFocusVisualProperty, value);
}
}
}
Empty file.
Original file line number Diff line number Diff line change
@@ -1 +1 @@
53707b8b855b32a02ee58fc3f865455a79b8b9d7
72aa238cd565ef63e8d52c29982a587e039d04ec
3 changes: 2 additions & 1 deletion paket.dependencies
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ nuget NHotkey.Wpf 1.2.1
nuget xunit 1.9.2
nuget xunit.extensions 1.9.2

github ControlzEx/ControlzEx:53707b8b855b32a02ee58fc3f865455a79b8b9d7 src/ControlzEx/PackIconBase.cs
github ControlzEx/ControlzEx:72aa238cd565ef63e8d52c29982a587e039d04ec src/ControlzEx/KeyboardNavigationEx.cs
github ControlzEx/ControlzEx:72aa238cd565ef63e8d52c29982a587e039d04ec src/ControlzEx/PackIconBase.cs
3 changes: 2 additions & 1 deletion paket.lock
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,5 @@ NUGET
GITHUB
remote: ControlzEx/ControlzEx
specs:
src/ControlzEx/PackIconBase.cs (53707b8b855b32a02ee58fc3f865455a79b8b9d7)
src/ControlzEx/KeyboardNavigationEx.cs (72aa238cd565ef63e8d52c29982a587e039d04ec)
src/ControlzEx/PackIconBase.cs (72aa238cd565ef63e8d52c29982a587e039d04ec)
4 changes: 2 additions & 2 deletions samples/Caliburn.Metro.Demo/Caliburn.Metro.Demo.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2')">
<ItemGroup>
<Reference Include="Caliburn.Micro.Platform.Core">
<HintPath>..\..\packages\Caliburn.Micro\lib\net45\Caliburn.Micro.Platform.Core.dll</HintPath>
Expand All @@ -202,7 +202,7 @@
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1' Or $(TargetFrameworkVersion) == 'v4.6.2')">
<ItemGroup>
<Reference Include="Caliburn.Micro">
<HintPath>..\..\packages\Caliburn.Micro.Core\lib\net45\Caliburn.Micro.dll</HintPath>
Expand Down
Loading