When a standard WPF button is clicked, it gets highlighted in blue (probably using the blue color from whatever Windows theme is set), and it stays highlighted until you interact with any other control. For my application, it is confusing for the user.
Is there a simple way turn this off and get the button back to its normal style? I am using .NET 4.
This is the default look for Aero buttons when they have focus. You can either set
Focusable="False"
or use a custom Style, that doesn't render it differently when the button has focus. Something like:You'd need to add a reference to PresentationFramework.Aero.dll
What happens is that the button accepts the input focus after it has been clicked, just like any other control does when you click on it.
And the way that Windows indicates that a control has the input focus (at least under the Aero theme) is with a subtle blue highlight.
For a button control in particular, when it has the input focus, simply pressing the Enter key will "push" that button. That's why maintaining the highlight is very important, so that the user knows what to expect.
The better solution is to set the focus to a different control in your window immediately after the user has clicked on the button. That way, it will no longer be automatically highlighted and no action will be automatically triggered when the user presses the Enter key. (This is the real usability problem that you're trying to solve, even if you don't know it yet. Nothing is more confusing than a button inadvertently getting clicked when the user is actually trying to type something.)
You could prevent the button from ever getting the focus altogether by setting its
Focusable
property to false, but I would very much recommend against this. Once you've done this, there will be no way for the user to "press" the button using only the keyboard. Well-designed applications should always be accessible to users who either prefer not to or who are unable to use the mouse.That is simply the focussed state. To turn it off you will have to change the focussed state. It's easiest by using Blend.
I do not recommend setting Focusable to false because it interferes with using the keyboard
I needed to do something similar, but in code at runtime, it looked like this
You can see that i comment the ""RenderMouseOver" line
My first hope was using FrameworkElementFactory but i needed to create all the default template.... ALL BY HAND! ;)
Using
It give me the template i wanted and then removing the Render section was easy.
Try to set
Focusable
to false. The button will be clickable but will not remain focused.I found 2 steps solution. The solution is little funny but working . My referance posts are;
How to remove global FocusVisualStyle to all the Controls?
and C# WPF application .NET 4.5 Set Mouse Position
One DLL must be imported , because WPF is not directly supporting mouse cursor move.
[DllImport("User32.dll")] private static extern bool SetCursorPos(int X, int Y);
SetCursorPos(0, 0); ButtonName.FocusVisualStyle = null;
It works for me .