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 interac
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
<Style x:Key="TouchButton" TargetType="{x:Type Button}">
<Setter Property="IsTabStop" Value="false"/>
<Setter Property="Focusable" Value="false"/>
<Setter Property="ClickMode" Value="Press"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="Border" CornerRadius="2" BorderThickness="1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="Button.IsMouseOver" Value="True">
<Setter TargetName="Border" Property="Background" Value="Red"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
I needed to do something similar, but in code at runtime, it looked like this
//You can get this XAML by using System.Windows.Markup.XamlWriter.Save(yourButton.Template)";
const string controlXaml = "<ControlTemplate TargetType=\"ButtonBase\" " +
"xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" " +
"xmlns:s=\"clr-namespace:System;assembly=mscorlib\" " +
"xmlns:mwt=\"clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero\">" +
"<mwt:ButtonChrome Background=\"{TemplateBinding Panel.Background}\" " +
"BorderBrush=\"{TemplateBinding Border.BorderBrush}\" " +
"RenderDefaulted=\"{TemplateBinding Button.IsDefaulted}\" " +
//"RenderMouseOver=\"{TemplateBinding UIElement.IsMouseOver}\" " +
"RenderPressed=\"{TemplateBinding ButtonBase.IsPressed}\" Name=\"Chrome\" SnapsToDevicePixels=\"True\">" +
"<ContentPresenter RecognizesAccessKey=\"True\" " +
"Content=\"{TemplateBinding ContentControl.Content}\" " +
"ContentTemplate=\"{TemplateBinding ContentControl.ContentTemplate}\" " +
"ContentStringFormat=\"{TemplateBinding ContentControl.ContentStringFormat}\" " +
"Margin=\"{TemplateBinding Control.Padding}\" " +
"HorizontalAlignment=\"{TemplateBinding Control.HorizontalContentAlignment}\" " +
"VerticalAlignment=\"{TemplateBinding Control.VerticalContentAlignment}\" " +
"SnapsToDevicePixels=\"{TemplateBinding UIElement.SnapsToDevicePixels}\" /></mwt:ButtonChrome>" +
"<ControlTemplate.Triggers>" +
"<Trigger Property=\"UIElement.IsKeyboardFocused\">" +
"<Setter Property=\"mwt:ButtonChrome.RenderDefaulted\" TargetName=\"Chrome\"><Setter.Value><s:Boolean>True</s:Boolean></Setter.Value></Setter>" +
"<Trigger.Value><s:Boolean>True</s:Boolean></Trigger.Value></Trigger>" +
"<Trigger Property=\"ToggleButton.IsChecked\">" +
"<Setter Property=\"mwt:ButtonChrome.RenderPressed\" TargetName=\"Chrome\"><Setter.Value><s:Boolean>True</s:Boolean></Setter.Value></Setter>" +
"<Trigger.Value><s:Boolean>True</s:Boolean></Trigger.Value></Trigger>" +
"<Trigger Property=\"UIElement.IsEnabled\"><Setter Property=\"TextElement.Foreground\"><Setter.Value><SolidColorBrush>#FFADADAD</SolidColorBrush></Setter.Value></Setter>" +
"<Trigger.Value><s:Boolean>False</s:Boolean></Trigger.Value></Trigger></ControlTemplate.Triggers>" +
"</ControlTemplate>";
var xamlStream = new MemoryStream(System.Text.Encoding.Default.GetBytes(controlXaml));
var _buttonControlTemplate = (ControlTemplate)System.Windows.Markup.XamlReader.Load(xamlStream);
var yourButton = new Button() { Template = _buttonControlTemplate };
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
System.Windows.Markup.XamlWriter.Save(myButton.Template)
It give me the template i wanted and then removing the Render section was easy.
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 .
Try to set Focusable to false. The button will be clickable but will not remain focused.
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:
xmlns:theme="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
<Style x:Key="BaseButtonStyle" TargetType="{x:Type ButtonBase}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ButtonBase}">
<theme:ButtonChrome Name="Chrome" Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}" RenderDefaulted="{TemplateBinding Button.IsDefaulted}"
RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}"
SnapsToDevicePixels="true">
<ContentPresenter Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</theme:ButtonChrome>
<ControlTemplate.Triggers>
<!--
Do not show blue when focused
<Trigger Property="IsKeyboardFocused" Value="true">
<Setter TargetName="Chrome" Property="RenderDefaulted" Value="true" />
</Trigger>-->
<Trigger Property="ToggleButton.IsChecked" Value="true">
<Setter TargetName="Chrome" Property="RenderPressed" Value="true" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#ADADAD" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="{x:Type ToggleButton}" BasedOn="{StaticResource BaseButtonStyle}" TargetType="{x:Type ToggleButton}" />
<Style x:Key="{x:Type RepeatButton}" BasedOn="{StaticResource BaseButtonStyle}" TargetType="{x:Type RepeatButton}" />
<Style x:Key="{x:Type Button}" BasedOn="{StaticResource BaseButtonStyle}" TargetType="{x:Type Button}" />
You'd need to add a reference to PresentationFramework.Aero.dll